小编tfc*_*mad的帖子

C#CancellationToken如何与SqlConnection.OpenAsync(token)一起使用?

我试图将CancellationToken与SqlConnection.OpenAsync()结合使用,以限制OpenAsync函数花费的时间。

我创建一个新的CancellationToken并将其设置为在200毫秒后取消。然后,我将其传递给OpenAsync(token)。但是,此功能仍可能需要几秒钟才能运行。

查看文档,我真的看不到我在做什么错。 https://docs.microsoft.com/zh-cn/dotnet/api/system.data.sqlclient.sqlconnection.openasync?view=netframework-4.7.2

这是我正在使用的代码:

    private async void btnTestConnection_Click(object sender, EventArgs e)
    {
        SqlConnection connection = new SqlConnection(SQLConnectionString);
        Task.Run(() => QuickConnectionTest(connection)).Wait();
    }

    public async Task QuickConnectionTest(SqlConnection connection)
    {
        CancellationTokenSource source = new CancellationTokenSource();
        CancellationToken token = source.Token;
        source.CancelAfter(200);

        ConnectionOK = false;

        try
        {
            using (connection)
            {
                await connection.OpenAsync(token);

                if (connection.State == System.Data.ConnectionState.Open)
                {
                    ConnectionOK = true;
                }

            }
        }
        catch (Exception ex)
        {
            ErrorMessage = ex.ToString();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我期望OpenAsync()提前结束,当200毫秒过去后CancellationToken抛出OperationCanceledException时,它只是等待。

要复制此代码,请执行以下操作:

  • 运行代码:结果=连接正常
  • 停止SQL服务
  • 运行代码:挂起连接的长度。

  • c# asynchronous

    5
    推荐指数
    1
    解决办法
    382
    查看次数

    标签 统计

    asynchronous ×1

    c# ×1