FileStream.Position은 이제 ReadAsync 또는 WriteAsync가 완료된 후 업데이트됩니다.
변경 내용 설명
Windows의 이전 .NET 버전에서는 비동기 읽기 또는 쓰기 작업이 시작된 후 FileStream.Position이 업데이트되었습니다. .NET 6부터 FileStream.Position이 낙관적으로 업데이트됩니다.
- WriteAsync가 시작된 후 작업이 실패하거나 취소되면 위치가 수정됩니다.
- ReadAsync가 시작될 때 전체 버퍼를 읽지 않으면 작업이 완료된 후 위치가 수정됩니다.
도입된 버전
.NET 6
변경 이유
FileStream은 스레드로부터 안전하지 않았지만 .NET 6까지 .NET은 Windows에서 비동기 메서드(ReadAsync 및 WriteAsync)에 대한 여러 동시 호출을 지원하려고 했습니다.
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
.NET