gpt4 book ai didi

C# SQL连接OpenAsync不是异步的

转载 作者:行者123 更新时间:2023-11-30 15:56:10 25 4
gpt4 key购买 nike

我正在尝试异步打开到 SQL 服务器的连接,以免占用 UI 线程。但我发现对 connection.OpenAsync() 的调用在连接打开之前不会返回,这与 connection.Open() 完全一样。

这段代码重现了这个问题:

public static void Main(string[] args)
{
System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
builder.UserID = "sa";
builder.Password = "1234";
builder.DataSource = "192.168.1.254\\SQLEXPRESS";
builder.InitialCatalog = "MyDatabase";
builder.PersistSecurityInfo = true;

DbConnection connection = new System.Data.SqlClient.SqlConnection(builder.ConnectionString);

Console.WriteLine("about to connect");

Task connection_task = connection.OpenAsync();

Console.WriteLine("started");

while (!connection_task.IsCompleted && !connection_task.IsFaulted && !connection_task.IsCanceled)
{
Console.WriteLine("busy");
}

Console.WriteLine("done");
}

在这种情况下,192.168.1.254 不存在。消息 about to connect 立即出现,但在等待连接超时时没有任何反应,然后在连接超时后消息 starteddone 同时出现。我希望消息 started 会在消息 about to connect 之后立即出现,然后消息 done 会在连接计时后出现出。

我猜我对返回的 Task 做错了什么,但是 Microsoft 页面在 Task-based Asynchronous Pattern 上当然意味着我应该能够简单地调用 OpenAsync() 方法并且返回的 Task 将异步运行,而不是同步发生并占用调用的操作线程直到 Task 完成。

最佳答案

事实证明,这是 Mono 运行时中的错误,代码在 Microsoft .NET 上运行良好。 MySQL .NET 库 (MySql.Data) 似乎也存在类似的错误,无论使用 Mono 还是 Microsoft .NET 运行时,它都会同步运行任务。

编辑:我找到了一个 bug report MySQL 的问题。

关于C# SQL连接OpenAsync不是异步的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47456689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com