C# 获取互斥后调用等待操作
在获取C# 获取互斥后调用等待操作,c#,windows-phone-8.1,mutex,C#,Windows Phone 8.1,Mutex,在获取互斥锁后,如何使用wait FileIO.WriteTextAsync()(在Windows Phone 8.1中)写入文件,以便没有两个线程访问同一个文件,并确保互斥。我正在做以下工作: mutex.WaitOne() try { await FileIO.WriteTextAsync(filename, text); Debug.WriteLine("written"); } finally { mutex.ReleaseMutex(); } 但是该方法只适
互斥锁后,如何使用wait FileIO.WriteTextAsync()
(在Windows Phone 8.1中)写入文件,以便没有两个线程访问同一个文件,并确保互斥。我正在做以下工作:
mutex.WaitOne()
try
{
await FileIO.WriteTextAsync(filename, text);
Debug.WriteLine("written");
}
finally
{
mutex.ReleaseMutex();
}
但是该方法只适用于一到两次迭代,然后抛出一个System.Exception
。另外,如果我删除wait
关键字或完全删除文件写入方法,代码运行得非常好。所以,所有的麻烦都是由调用异步方法引起的。如何解决此问题?这是监视器的工作(或使其更异步友好,信号量),而不是互斥
问题是,WriteTextAsync
的延续很可能在单独的线程上运行,因此它无法释放互斥锁-这只能从最初获取互斥锁的同一线程中完成
var semaphore = new SemaphoreSlim(1);
await semaphore.WaitAsync();
try
{
await FileIO.WriteTextAsync(filename, text);
Debug.WriteLine("written");
}
finally
{
semaphore.Release();
}
如果您在同一进程中保护资源,那么您应该执行此任务。如果您需要在进程之间保护资源(我认为互斥的主要角色),那么请查看。