我正在开发一个多线程 WindowsPhone8 应用程序,该应用程序在异步方法中有关键部分。
有谁知道在 C# 中正确使用信号量/互斥锁的方法,您使用的是嵌套异步调用,其中内部方法可能正在获取它已经在调用堆栈中获取的相同锁?我认为 SemaphoreSlim 可能是答案,但看起来它会导致死锁。
public class Foo
{
SemaphoreSlim _lock = new SemaphoreSlim(1);
public async Task Bar()
{
await _lock.WaitAsync();
await BarInternal();
_lock.Release();
}
public async Task BarInternal()
{
await _lock.WaitAsync(); // deadlock
// DO work
_lock.Release();
}
}