[C#] 多執行緒快速讀寫同個檔案 強迫列隊

有時候有多個執行緒要同時寫入資料到某個檔案

會遇到上一個執行緒還沒把檔案關閉,

就會卡住,出現一堆錯誤,

例如:

System.IO.IOException: '由於另一個處理序正在使用檔案 'D:\log.log',所以無法存取該檔案。'

這裡提供一個寫法,不論誰、不論在何時都可以同時呼叫這個任務(Task)

但是他會強制一次只執行一個,結束後再次放行



註:
這個方式僅適用於「只要寫一行」,因為流程是開啟檔案->寫一行->關閉檔案

如果是要寫多行,例如日誌紀錄(Log),則不建議使用此方法,因為在開關的過程中會花費太久的時間,造成效能瓶頸。

也可以使用Timer的方式定時輸出,例如每秒把Log輸出一次,可以參考這篇定時寫入日誌

留言