簡體   English   中英

使用TextWriter.Synchronized或在多線程文件IO中鎖定 - C#WPF .net 4.5

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM