I know that in the sync world the first snippet is right, but what's about WaitAsync and async/await magic? Please give me some .net internals.

```
await _semaphore.WaitAsync();
try
{
    // todo
}
finally
{
    _semaphore.Release();
}

```

or

```
try
{
    await _semaphore.WaitAsync();
    // todo
}
finally
{
    _semaphore.Release();
}

```