有時候有多個執行緒要同時寫入資料到某個檔案
會遇到上一個執行緒還沒把檔案關閉,
就會卡住,出現一堆錯誤,
例如:
System.IO.IOException: '由於另一個處理序正在使用檔案 'D:\log.log',所以無法存取該檔案。'
這裡提供一個寫法,不論誰、不論在何時都可以同時呼叫這個任務(Task)
但是他會強制一次只執行一個,結束後再次放行
註:這個方式僅適用於「只要寫一行」,因為流程是開啟檔案->寫一行->關閉檔案
如果是要寫多行,例如日誌紀錄(Log),則不建議使用此方法,因為在開關的過程中會花費太久的時間,造成效能瓶頸。
也可以使用Timer的方式定時輸出,例如每秒把Log輸出一次,可以參考這篇定時寫入日誌
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com