非同期メソッド内に重要なセクションがあるマルチスレッド 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();
}
}