0
System.IO.StreamWriter保證在處理緩衝區時將字節保存在緩衝區中。像這樣WinRT DataWriter如何確保緩衝區中的所有字節都保存到後臺存儲
using (StreamWriter writer = new StreamWriter("C:\\a.txt"))
{
writer.WriteLine("Hello world.");
}
StreamWriter的好處是我可以從多個線程調用Dispose方法而不必擔心數據丟失。
但是對於Windows.Storage.Streams.DataWriter,我必須明確調用它的StoreAsync方法,否則數據不會保存到文件中。問題是,如果DataWriter已被處置(來自其他線程),調用StoreAsync將拋出ObjectDisposedException。所以我必須在調用StoreAsync之前檢查DataWriter是否已經被拋棄。所以我的代碼看起來像
try
{
dataWriter.WriteBytes(buffer);
}
catch(...)
{
//...
}
finally
{
lock (lockForDisposingDataWriter)
{
if (!bDisposed) //Boolean flag indicating whether dataWriter has been disposed of
{
bDisposed = true;
await dataWriter.StoreAsync(); //await operator is not allowed here
dataWriter.Dispose();
}
}
}
的問題:
- 如何確保DataWriter緩衝區的字節存儲?我認爲在finally塊中調用StoreAsync會引起麻煩,因爲在finally塊中不允許「await」。
- 如果我的解決方案能夠工作,如何檢測數據寫入程序是否以線程安全方式處理?
是的,這就是我試圖解決另一個問題:「等待」經營者不能在鎖定語句體中使用,也不能在最終使用條款。 – kennyzx
我想你可以做一些事情:dataWriter.StoreAsync()。ContinueWith(()=> dataWriter.Dispose()); – thumbmunkeys
不知道這是否有助於:dataWriter.StoreAsync()。AsTask()。Wait(); –