我试图将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时,它只是等待。
要复制此代码,请执行以下操作: