我有一个C#多线程应用程序,当两个不同的线程冲突调用写出数据文件的例程时,我遇到了一个简单的问题。该程序已经从一个古老的VB程序转换而来,因此该例程中的文件代码全部使用VBNET.FileSystem调用,即
VBNET.FileSystem.FreeFile()
...
VBNET.FileSystem.FileOpen(...)
...
VBNET.FileSystem.WriteLine(...)
...
VBNET.FileSystem.FileClose(...)
例外说(用专有的东西混淆了......)
"该进程无法访问该文件' C:\ xxxx \ yyyy \ zzz.txt'因为它 正在被另一个进程使用"
通过使其成为线程安全的方法很容易修复,但是我很好奇的是措辞。为什么处理?问题是线程问题,而不是进程问题,并使例程成为关键部分解决了问题。 VBNET文件I-O操作会产生单独的进程吗?
答案 0 :(得分:2)
它可能会说"过程"因为错误信息要说" thread"同样会产生误导,因为它会暗示你的过程中存在不同的线程,而事实上它可能是一个完全不同的过程。所有低级API都知道您无法访问它,因为它已被访问。它可能很难提供上下文化的错误消息,并且有风险,因为它必须检索本身可能失败的其他信息并导致不同的更具误导性的异常(通常在处理/包装时尽量少做例外)。
所以最重要的是,为错误信息提供更多信息会使错误处理更加脆弱。
或许更好的措辞是"另一个线程或流程"但我发现很多微软的错误更加含糊不清。