title: Locking with nested async calls
body: <p>I am working on a multi threaded WindowsPhone8 app that has critical sections within async methods.  </p>
  
  <p>Does anyone know of a way to properly use semaphores / mutexes in C# where you are using nested async calls where the inner method may be acquiring the same lock that it already acquired up the callstack?  I thought the SemaphoreSlim might be the answer, but it looks like it causes a deadlock.</p>
  
  <pre><code>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();
       }
  
  }
  </code></pre>