Ваш код мне кажется правильным. Если это не выполняет отмену, как ожидалось, то SqlConnection.OpenAsync
не поддерживает надежную отмену. Отмена является кооперативным. Если это не поддерживается должным образом, или если есть ошибка, у вас нет никаких гарантий.
Попробуйте выполнить обновление до последней версии .NET Framework. Вы также можете попробовать .NET Core, который, похоже, возглавляет .NET Framework. Я следую за репозиториями GitHub и вижу множество ошибок ADO.NET, связанных с асинхронностью.
Вы можете попробовать позвонить SqlConnection.Dispose()
после истечения времени ожидания. Может быть, это работает. Вы также можете попробовать использовать синхронный API (Open
). Может быть, это использует другой путь кода. Я считаю, что это не так, но стоит попробовать.
В случае, если это также не работает, вам нужно написать свой код, чтобы ваша логика продолжалась, даже если задача подключения не была выполнена. Притворись, что он завершен, и пусть он задержится на заднем плане, пока не завершится сам Это может привести к увеличению использования ресурсов, но это может быть хорошо.
В любом случае рассмотрите возможность открытия проблемы в репозитории corefx GitHub с минимальным воспроизведением (например, 5 строк, соединяющихся с example.com). Это должно просто работать.