3 回答

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
真正回答你的問題。不,它不會(huì)使您免于鎖定問題。async 不是一個(gè)可以同步所有線程的神奇關(guān)鍵字。相反,它甚至可能根據(jù)同步器啟動(dòng)自己的線程。
除非您在單線程模型上,否則是的,這將排隊(duì),因?yàn)橥狡髦挥幸粋€(gè)線程可以使用。然后它必須通過上下文切換將所有異步調(diào)用排隊(duì)。但是,如果您使用的是單線程模型,那么您一開始就不會(huì)遇到這個(gè)問題。

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
您可以通過多種方式解決問題。
使用鎖定機(jī)制來同步對共享資源的訪問。對于這種情況,一個(gè)不錯(cuò)的選擇是 ReaderWriterLockSlim
使用日志框架(有很多好的庫并且非常可靠)。
就我個(gè)人而言,我更喜歡使用日志記錄框架,因?yàn)槟鷮⑹褂迷S多有用的功能(滾動(dòng)文件附加程序、數(shù)據(jù)庫記錄器等),它們將為您提供一個(gè)干凈的解決方案,用于零黑客和維護(hù)的日志記錄。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
雖然使用日志框架是最好的解決方案,但專門解決這個(gè)問題......
附加模式需要鎖定文件,當(dāng)無法獲得鎖定時(shí),您會(huì)收到收到的錯(cuò)誤。你可以同步所有線程,但你會(huì)阻塞它們一段時(shí)間。使用WriteAsync
并不能緩解問題。
更好的解決方案是將您的消息排入隊(duì)列,然后有一個(gè)專用線程將它們出列并寫入日志。因此,您不需要同步,因?yàn)樗袑懭攵加蓡蝹€(gè)線程完成。
我會(huì)再次警告:使用日志框架。
- 3 回答
- 0 關(guān)注
- 165 瀏覽
添加回答
舉報(bào)