ファイルに書き込もうとしていますが、「ときどき」同時実行性に起因すると思われる問題に遭遇します。ときどきwithメッセージ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
ので、他のオプションは何ですか?