.net 异步文件IO是线程安全的吗?

.net 异步文件IO是线程安全的吗?,.net,file-io,asynchronous,filestream,.net,File Io,Asynchronous,Filestream,像FileStream.BeginWrite这样的异步文件IO是线程安全的吗?如果没有,那么它需要用“SyncLock”包装,这意味着它仍然在阻塞线程。FileStream.BeginWrite已经启动了一个新线程来访问文件。您不需要在单独的线程上启动FileStream.BeginWrite(因为这将是线程中的线程)。另一方面,多个FileStream.BeginWrite函数不应同时访问同一文件。如果资源由多个线程访问,这意味着它是一个共享资源,在c#中有大量关于使用它们的资源。FileSt

像FileStream.BeginWrite这样的异步文件IO是线程安全的吗?如果没有,那么它需要用“SyncLock”包装,这意味着它仍然在阻塞线程。

FileStream.BeginWrite
已经启动了一个新线程来访问文件。您不需要在单独的线程上启动
FileStream.BeginWrite
(因为这将是线程中的线程)。另一方面,多个
FileStream.BeginWrite
函数不应同时访问同一文件。

如果资源由多个线程访问,这意味着它是一个共享资源,在c#中有大量关于使用它们的资源。

FileStream.BeginRead/BeginWrite实现是异步的,但它们对重叠I/O的使用不是以线程安全的方式完成的

您可以看到,BeginRead/BeginWrite不接受读/写文件位置作为参数,因此对其他线程(如Seek)的操作可能会导致读/写位于错误的文件位置

如果您仍然不相信,Microsoft的FileStream实现会在&中的注释中明确指定“这不是线程安全的”


一句话:如果您需要线程安全的重叠I/O,那么您必须将p/Invoke与ReadFile/WriteFile一起使用。

您能提供一个让您认为它不是线程安全的示例吗?