3 回答
TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
真正回答你的問(wèn)題。不,它不會(huì)使您免于鎖定問(wèn)題。async 不是一個(gè)可以同步所有線程的神奇關(guān)鍵字。相反,它甚至可能根據(jù)同步器啟動(dòng)自己的線程。
除非您在單線程模型上,否則是的,這將排隊(duì),因?yàn)橥狡髦挥幸粋€(gè)線程可以使用。然后它必須通過(guò)上下文切換將所有異步調(diào)用排隊(duì)。但是,如果您使用的是單線程模型,那么您一開(kāi)始就不會(huì)遇到這個(gè)問(wèn)題。
TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
您可以通過(guò)多種方式解決問(wèn)題。
使用鎖定機(jī)制來(lái)同步對(duì)共享資源的訪問(wèn)。對(duì)于這種情況,一個(gè)不錯(cuò)的選擇是 ReaderWriterLockSlim
使用日志框架(有很多好的庫(kù)并且非??煽浚?。
就我個(gè)人而言,我更喜歡使用日志記錄框架,因?yàn)槟鷮⑹褂迷S多有用的功能(滾動(dòng)文件附加程序、數(shù)據(jù)庫(kù)記錄器等),它們將為您提供一個(gè)干凈的解決方案,用于零黑客和維護(hù)的日志記錄。
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
雖然使用日志框架是最好的解決方案,但專門(mén)解決這個(gè)問(wèn)題......
附加模式需要鎖定文件,當(dāng)無(wú)法獲得鎖定時(shí),您會(huì)收到收到的錯(cuò)誤。你可以同步所有線程,但你會(huì)阻塞它們一段時(shí)間。使用WriteAsync并不能緩解問(wèn)題。
更好的解決方案是將您的消息排入隊(duì)列,然后有一個(gè)專用線程將它們出列并寫(xiě)入日志。因此,您不需要同步,因?yàn)樗袑?xiě)入都由單個(gè)線程完成。
我會(huì)再次警告:使用日志框架。
- 3 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)
