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?