Well that was fun to debug!
|
cts.CancelAfter(parameters.ConnectionTimeout * 1000); // Convert to milliseconds |
As the ConnectionTimeout
is used to set the cancellation token's CancelAfter
* 1000...
- If
ConnectionTimeout = 0
then 0 * 1000 = 0
- this causes the cancellation token to immediately expire, so all operations such as gather the tenant metadata fail with A task was canceled
exception message (which is what led me down this rabbit hole).
- If
ConnectionTimeout = int.MaxValue
(or any value greater than int.MaxValue / 1000) then int.MaxValue * 1000
throws as the result is larger than int.
Ideally this needs more defensive coding, eg:
- When
ConnectionTimeout == 0
we do not require a CancelAfter
?
- When
ConnectionTimeout >= int.MaxValue / 1000
set the CancelAfter
to int.MaxValue
?