如何使用StorageFile操作处理并发?

Row*_*haw 1 c# microsoft-metro windows-8

我正在尝试写入一个文件,但"偶尔"我遇到了一些我认为属于并发性的问题,因为有些时候,我收到了一条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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我只能假设这是一些并发性,或者它仍然可以在其他地方读取,但我似乎无法找到一种等待它可用的方法 - 我通常会lock在它周围,但这是不允许await这样做有什么其他选择?

Ste*_*ary 6

通常,在上一个操作完成之前,您不会启动下一个操作.

提示:避免async void; 使用async Task来代替.这使您可以知道上一个操作何时完成.