[英]Using TextWriter.Synchronized or having lock in multithreaded file IO - C# WPF .net 4.5
好的,有兩種方法可以在多線程系統中將文本寫入文件
哪一個比其他更好
第一種情況:擁有一個靜態對象來鎖定streamwriter並進行操作
第二種情況:
TextWriter twWaitingToBeFetched;
twWaitingToBeFetched = TextWriter.Synchronized(new StreamWriter(stringPath, true));
twWaitingToBeFetched.WriteLine(srNewComposedUrl);
twWaitingToBeFetched.Flush();
你覺得哪一個更好,為什么?
我需要多個線程任務來編寫相同的流
C#.net 4.5 - WPF應用程序
如果使用第二個變量,則隱式和隱藏鎖定。 調用代碼確實知道鎖的任何信息。 事實上,它可能錯誤地假設對WriteLine
兩次調用是原子的,並且將在輸出中一個接一個地出現。
使用顯式鎖定,以便您可以更好地控制哪些操作看起來是原子的。
TextWriter twWaitingToBeFetched;
twWaitingToBeFetched = TextWriter.Synchronized(new StreamWriter(stringPath, true));
twWaitingToBeFetched.WriteLine(srNewComposedUrl);
twWaitingToBeFetched.Flush();
這不會同步任何內容,因為每個WriteLine
都是在一個新的獨立同步WriteLine
器上調度的。 您還需要正確處理對象,而不是不必要地調用Flush
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.