Wie sollte ich die try/finally strukturieren, wenn ein SemaphorSlim mit Storno-Token verwenden, so dass OperationCancelledException korrekt behandelt wird? Bei Option A löst das Abbrechen der Token-Quelle OperationCancelledException aus, ruft aber nicht Release() auf. Bei Option B führt das Abbrechen der Token-Quelle zu OperationCancelledException und ruft Release() auf.
// 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();
}