Как мне структурировать 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();
}