我有多个后台工作者都想写入log.txt,这导致异常进程无法访问文件’C:\ … \ log.txt’,因为它正被另一个进程使用..我… 。
要真正回答你的问题。不,它不会让你免于锁定问题。 async不是一个可以同步所有线程的魔术关键字。相反,它甚至可能根据同步器启动自己的线程。
除非你在单个线程模型上,否则这将排队,因为同步器只有一个线程可以使用。然后它必须使用上下文切换排队所有异步调用。但是,如果您使用单线程模型,则首先不会出现此问题。
您可以通过多种方式解决问题。
使用锁定机制来同步对共享资源的访问。这种情况的一个好选择是 ReaderWriterLockSlim
使用日志框架(有很多好的库,非常可靠)。
我个人更喜欢使用日志框架,因为有许多功能你会使用(滚动文件appender,db logger等),它将为你提供一个干净的解决方案,用于记录零黑客和维护。
虽然使用日志框架是 最好 解决方案,专门解决问题......
追加模式要求锁定文件,当无法获得锁定时,您将收到您收到的错误。您可以同步所有线程,但之后您将阻止它们一段时间。运用 WriteAsync 并没有缓解这个问题。
WriteAsync
更好的解决方案是将您的消息排入队列,然后让专用线程将它们出列并写入日志。因此,你 不需要同步 因为所有写入都是由单个线程完成的。
我将再次警告:使用日志框架。