다음을 통해 공유


ReadAsync 또는 WriteAsync 완료 후 FileStream.Position 업데이트

FileStream.Position은 이제 ReadAsync 또는 WriteAsync가 완료된 후 업데이트됩니다.

변경 내용 설명

Windows의 이전 .NET 버전에서는 비동기 읽기 또는 쓰기 작업이 시작된 후 FileStream.Position이 업데이트되었습니다. .NET 6부터 FileStream.Position이 낙관적으로 업데이트됩니다.

  • WriteAsync가 시작된 후 작업이 실패하거나 취소되면 위치가 수정됩니다.
  • ReadAsync가 시작될 때 전체 버퍼를 읽지 않으면 작업이 완료된 후 위치가 수정됩니다.

도입된 버전

.NET 6

변경 이유

FileStream은 스레드로부터 안전하지 않았지만 .NET 6까지 .NET은 Windows에서 비동기 메서드(ReadAsyncWriteAsync)에 대한 여러 동시 호출을 지원하려고 했습니다.

FileStream을 통한 100% 비동기 파일 I/O를 허용하고 다음 문제를 수정하기 위해 변경이 도입되었습니다.

  • 코드가 병렬 읽기 또는 쓰기를 수행하기 때문에 읽기 또는 쓰기 시작 전에 설정되는 FileStream.Position에 의존하는 경우 대신 System.IO.RandomAccess API를 사용하도록 전환해야 합니다. RandomAccess API는 병렬 파일 작업을 위해 설계되었습니다.

  • .NET 6에서 .NET 5 동작을 사용하도록 설정하려면 AppContext 스위치 또는 환경 변수를 지정합니다. 스위치를 true로 설정하면 .NET 6에서 FileStream에 대한 모든 성능 개선 사항을 옵트아웃할 수 있습니다.

    {
        "configProperties": {
            "System.IO.UseNet5CompatFileStream": true
        }
    }
    
    set DOTNET_SYSTEM_IO_USENET5COMPATFILESTREAM=1
    

    Important

    이 스위치는 .NET 6에서만 사용할 수 있습니다. .NET 7에서는 제거되었습니다.

영향을 받는 API