如何使用写入文件await FileIO.WriteTextAsync()
(在 Windows Phone 8.1 中)获取后mutex
这样就不会有两个线程访问同一个文件并确保互斥。我正在执行以下操作:
mutex.WaitOne()
try
{
await FileIO.WriteTextAsync(filename, text);
Debug.WriteLine("written");
}
finally
{
mutex.ReleaseMutex();
}
但该方法仅适用于一两次迭代,之后它会抛出一个System.Exception
。另外,如果我删除await
关键字或完全删除文件写入方法,代码运行得很好。所以,所有的麻烦都是由调用异步方法引起的。我可以做什么来解决这个问题?
这是监视器的工作(或者为了使其更加异步友好,信号量),而不是互斥锁。
问题是,继续WriteTextAsync
可能在单独的线程上运行,所以它can't释放互斥体 - 这只能从最初获取互斥体的同一线程中完成。
var semaphore = new SemaphoreSlim(1);
await semaphore.WaitAsync();
try
{
await FileIO.WriteTextAsync(filename, text);
Debug.WriteLine("written");
}
finally
{
semaphore.Release();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)