Pretty simple question:
int retryAttempts = 3;
retry:
try {
await getSemaphore();
throw new Exception();
}
catch {
if (0 > retryAttempts--) {
await Task.Delay(5000);
goto retry;
}
return;
}
finally {
releaseSemaphore();
}
In this example, will the semaphore be released one or three times?
finally
will execute every time you leave the catch block. So in your case releaseSemaphore()
will be called three times (after each goto
).
I also invite you to read the official documentation about try-finally here