.net 异步文件IO是线程安全的吗?
像FileStream.BeginWrite这样的异步文件IO是线程安全的吗?如果没有,那么它需要用“SyncLock”包装,这意味着它仍然在阻塞线程。.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
已经启动了一个新线程来访问文件。您不需要在单独的线程上启动FileStream.BeginWrite
(因为这将是线程中的线程)。另一方面,多个FileStream.BeginWrite
函数不应同时访问同一文件。如果资源由多个线程访问,这意味着它是一个共享资源,在c#中有大量关于使用它们的资源。FileStream.BeginRead/BeginWrite实现是异步的,但它们对重叠I/O的使用不是以线程安全的方式完成的
您可以看到,BeginRead/BeginWrite不接受读/写文件位置作为参数,因此对其他线程(如Seek)的操作可能会导致读/写位于错误的文件位置
如果您仍然不相信,Microsoft的FileStream实现会在&中的注释中明确指定“这不是线程安全的”
一句话:如果您需要线程安全的重叠I/O,那么您必须将p/Invoke与ReadFile/WriteFile一起使用。您能提供一个让您认为它不是线程安全的示例吗?