This assertion is relying on OnReconnecting triggering a reconnect timeout error synchronously.

This happens to be the case, because the initialized `_disconnectTimeout` is 0 and `TaskAsyncHelper.Delay(new TimeSpan(0)).Then(action);` will run `action` before returning. If we ever rewrite SetTimeout using `Task.Delay`, this test probably won't pass.

I would just use a ManualResetEventSlim with a short timeout.