第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如果我使用 WriteAsync,當(dāng)多個(gè)后臺(tái)工作人員嘗試寫(xiě)入同一個(gè) .txt 文件時(shí)

如果我使用 WriteAsync,當(dāng)多個(gè)后臺(tái)工作人員嘗試寫(xiě)入同一個(gè) .txt 文件時(shí)

C#
紫衣仙女 2022-10-23 16:07:03
我有多個(gè)backgroundworkers都想寫(xiě)入 log.txt,這會(huì)導(dǎo)致異常The process cannot access the file 'C:\...\log.txt' because it is being used by another process.。我知道這是一個(gè)很長(zhǎng)的鏡頭,但如果我使用它會(huì)有所幫助WriteAsync()還是根本沒(méi)有效果?(如果這不是一個(gè)簡(jiǎn)單的解決方案,我想我必須實(shí)現(xiàn)mutex我以前見(jiàn)過(guò)的對(duì)象。)public static void WriteToLog(string text, bool append = true){    try    {        using (var writer = new StreamWriter("log.txt", append))        {            writer.Write(text);            // writer.WriteAsync(text); // Would this 'queue up' instead of trying                                            to access the same process at the same time?        }    }    catch (Exception ex)    {        Console.WriteLine($"ERROR! Fejl i loggen! {ex.Message}. {ex.StackTrace}");    }}
查看完整描述

3 回答

?
富國(guó)滬深

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)題。


查看完整回答
反對(duì) 回復(fù) 2022-10-23
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以通過(guò)多種方式解決問(wèn)題。

  1. 使用鎖定機(jī)制來(lái)同步對(duì)共享資源的訪問(wèn)。對(duì)于這種情況,一個(gè)不錯(cuò)的選擇是 ReaderWriterLockSlim

  2. 使用日志框架(有很多好的庫(kù)并且非??煽浚?。

就我個(gè)人而言,我更喜歡使用日志記錄框架,因?yàn)槟鷮⑹褂迷S多有用的功能(滾動(dòng)文件附加程序、數(shù)據(jù)庫(kù)記錄器等),它們將為您提供一個(gè)干凈的解決方案,用于零黑客和維護(hù)的日志記錄。


查看完整回答
反對(duì) 回復(fù) 2022-10-23
?
子衿沉夜

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ì)再次警告:使用日志框架。


查看完整回答
反對(duì) 回復(fù) 2022-10-23
  • 3 回答
  • 0 關(guān)注
  • 180 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)