System.IO.StreamWriter保证在处理时保存缓冲区中的字节。喜欢这个
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();
}
}
}
问题:
答案 0 :(得分:-1)
您的代码在任何情况下都有问题,因为您需要在致电StoreAsync()
之前等待Dispose()
来电。
在您的代码中StoreAsync()
可能会与Dispose()
并行执行。
你需要这样做:
await dataWriter.StoreAsync();
dataWriter.Dispose();