【发布时间】:2012-10-03 04:15:43
【问题描述】:
我正在尝试写入文件,但“偶尔”会遇到我认为归结为并发的问题,因为 某些 有时,我会收到 System.UnauthorizedAccessException留言:
访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))
...来自以下:
public async void SubmitChanges()
{
DataContractSerializer serializer =
new DataContractSerializer(typeof(LocalCache<T>));
StorageFile file = await ApplicationData.Current.LocalFolder
.CreateFileAsync(GetFileNameForType(),
CreationCollisionOption.ReplaceExisting);
//Occasionally throws here
using (var fi = await file.OpenTransactedWriteAsync())
{
serializer.WriteObject(fi.Stream.AsStreamForWrite(), this);
await fi.CommitAsync();
}
}
我只能假设这是由于某种并发性,或者它仍然可以在其他地方读取,但我似乎无法找到等待它可用的方法 - 我通常会lock围绕它,但 await 不允许这样做,那么其他选项是什么?
【问题讨论】:
-
如果是并发问题,需要加锁,可以使用 SemaphoreSlim.WaitAsync() msdn.microsoft.com/en-us/library/hh462788.aspx
-
@mydogisbox 此代码用于保存
标签: c# windows-8 microsoft-metro