Старый .Net способ выполнения асинхронного ввода-вывода для FileStream
заключается в использовании FileStream.BeginRead()
и FileStream.EndRead()
.
Документация MSDN для FileStream.BeginRead()
гласит:
FileStream предоставляет два разных режима работы: синхронный ввод-вывод и асинхронный ввод-вывод. Хотя любой из них может быть использован, базовые ресурсы операционной системы могут позволить доступ только в одном из этих режимов.
По умолчанию FileStream синхронно открывает дескриптор операционной системы. В Windows это замедляет асинхронные методы. Если используются асинхронные методы, используйте конструктор FileStream (String, FileMode, FileAccess, FileShare, Int32, Boolean).
Способ .Net 4.5x
для асинхронного ввода-вывода для FileStream
заключается в использовании Stream.ReadAsync()
.
Документация MSDN для FileStream.ReadAsync()
связана непосредственно с документацией для Stream.ReadAsync()
. В этой документации нет необходимости открывать файл в режиме async; действительно, пример кода в документации явно не делает этого.
Поэтому я предполагаю, что при использовании File.ReadAsync()
нет необходимости открывать файл в асинхронном режиме.
Правильно ли это предположение?
[EDIT]
Я только что обнаружил статью MSDN об использовании Async для доступа к файлам.
Это означает:
В примерах в этом разделе используется класс FileStream, который имеет параметр, который вызывает асинхронный ввод-вывод на уровне операционной системы. Используя эту опцию, во многих случаях можно избежать блокировки потока ThreadPool.
Чтобы включить эту опцию, вы указываете useAsync = true или options = FileOptions.Asynchronous аргумент в вызове конструктора.
Итак, теперь я думаю, что я должен открыть файл в асинхронном режиме... Если это так, то несколько неудачно, что пример кода, приведенный в документации для ReadAsync()
, не открывает файл асинхронно!