Является ли асинхронный файловый поток ввода-вывода безопасным? - PullRequest
3 голосов
/ 02 июня 2011

Безопасен ли асинхронный ввод-вывод файла, такой как FileStream.BeginWrite?Если нет, то его нужно обернуть с помощью «SyncLock», это означает, что он все еще блокирует поток.

Ответы [ 3 ]

4 голосов
/ 02 июня 2011

Кроме того, если к ресурсу обращаются несколько потоков, это означает, что он является общим ресурсом и имеется множество ресурсов для использования их в c #.

4 голосов
/ 02 июня 2011

FileStream.BeginWrite уже запускает новый поток для доступа к файлам.Вам не нужно запускать FileStream.BeginWrite в отдельном потоке (потому что это будет поток в потоке).С другой стороны, несколько функций FileStream.BeginWrite не должны обращаться к одному и тому же файлу одновременно.

1 голос
/ 21 ноября 2016

FileStream.BeginRead / BeginWrite реализации являются асинхронными, но их использование перекрывающегося ввода-вывода не выполняется потокобезопасным способом.

Вы можете видеть, что BeginRead / BeginWrite не принимает чтение / записьположение файла в качестве параметра, поэтому операции с другими потоками (например, Seek) могут привести к неправильному расположению файла для чтения / записи.

Если вы все еще не уверены, в реализации Microsoft FileStream явно указывается "Это не потокобезопасно. "в комментарии внутри BeginReadCore & BeginWriteCore .

Итог: если вам нужен перекрывающийся ввод-вывод, ориентированный на многопотоковый режим, вам придется использовать P /Вызвать с помощью ReadFile / WriteFile.

...