异步文件IO线程安全吗?

时间:2011-06-02 10:14:29

标签: .net file-io asynchronous filestream

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

此外,如果资源被多个线程访问,则意味着它是一个共享资源,并且有大量资源在c#中使用它们。

答案 2 :(得分:1)

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

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

如果您仍然不相信,Microsoft的FileStream实现明确指定"这不是线程安全。"在BeginReadCore&内的评论中BeginWriteCore

底线:如果您需要线程安全的重叠I / O,那么您必须使用P / Invoke和ReadFile / WriteFile。