Ошибка обработки SnowflakeDbCommand с неверной базой данных и / или схемой - PullRequest
0 голосов
/ 17 апреля 2020

Я столкнулся с проблемой в моем C# do tnet core rest API, где я должен позволить пользователю получать данные из любой базы данных и схемы Snowflake по своему выбору. Это разработано и по ряду причин, которые не имеют отношения к вопросу.

Я хочу изящно обработать случай, когда пользователь использует мой API с помощью базы данных, которая не существует, и, кроме того, схема, которая не существует в этой базе данных. С неверными данными в строке подключения это работает:

var conn = var conn = new SnowflakeDbConnection {ConnectionString = database.connectionString};
await conn.OpenAsync();
sqlCommand.CommandTimeout = commandTimeout;

Тогда вот где все обрывается:

await using var reader = await sqlCommand.ExecuteReaderAsync(cancellationToken);

Если я оберну строку выше в try {} catch {}, я получу это после подождать некоторое время:

System.OperationCanceledException: The operation was canceled.
   at Snowflake.Data.Core.RestRequester.SendAsync(HttpRequestMessage request, TimeSpan timeoutPerRestRequest, CancellationToken externalCancellationToken)
   at Snowflake.Data.Core.RestRequester.PostAsync[T](IRestRequest request, CancellationToken cancellationToken)
   at Snowflake.Data.Core.SFStatement.ExecuteAsync(Int32 timeout, String sql, Dictionary`2 bindings, Boolean describeOnly, CancellationToken cancellationToken)
   at Snowflake.Data.Client.SnowflakeDbCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)

Затем, сразу после того, как приложение аварийно завершает работу с довольно бессмысленной трассировкой стека, куча задач отменяется в агрегированном исключении.

Любой совет, как справиться с этим ? В идеале мы получим исключение отмены операции раньше на некоторое установленное время ожидания, но по крайней мере мне нужно обработать это без сбоя приложения.

Редактировать: я должен добавить, что когда это происходит, cancellationToken.IsCancellationRequested остается False. Возможно, это ошибка в SnowflakeDbCommand? Возможно, мне нужно отменить вручную?

...