SemaphoreSlim.Wait (CancellationToken) правильная попытка / наконец-то для OperationCancelledException?

Как мне структурировать try / finally при использовании SemaphorSlim с токеном отмены, чтобы исключение OperationCancelledException обрабатывалось правильно? В варианте A отмена источника токена вызывает исключение OperationCancelledException, но не вызывает Release (). В варианте B отмена источника токена вызывает исключение OperationCancelledException и ДЕЙСТВИТЕЛЬНО вызывает Release ().

// option A:
_semaphorSlim.Wait( _cancellationTokenSource.Token );
try
{
     // do work here
}
finally
{
     _semaphorSlim.Release();
}


// option B:
try
{
     _semaphorSlim.Wait( _cancellationTokenSource.Token );
     // do work here
}
finally
{
     _semaphorSlim.Release();
}
8
задан SFun28 4 June 2011 в 00:05
поделиться