大家好。我一直在使用MySQL API与我的MySQL数据库进行交互。唯一的问题是异步方法不起作用。
我的代码示例:
private MySqlConnection mySqlConnection;
private async Task OpenConnection() {
//Assign mySqlConnection if null
//Check if mySqlConnection is closed
await mySqlConnection.OpenAsync();
}
private async Task<bool> ExampleMethod() {
try {
await OpenConnection();
return true;
} catch {
return false;
}
}
每当我执行ExampleMethod
我的应用程序都会暂停,直到该方法完成其操作。有人可以告诉我可能有什么问题吗?
提前谢谢。
发生这种情况是因为MySql.Data
连接器中的Async
方法实际上不是异步的。它们在网络 I/O 上阻塞,并且仅在数据库操作完成时返回。(有关更详细的描述,请参阅此问题及其最高答案。MySQL 错误 #70111 在 MySQL 连接器中报告此问题。
要获得真正的异步数据库操作,您必须等到该错误得到解决,或者切换到其他连接器。我一直在开发一个新的、完全异步的连接器;要试用一下,请从NuGet安装MySqlConnector;它的来源在GitHub。
调试器将等待异步操作完成,这是设计使然。
async
主要是一种工具,可让您在不阻塞 UI 的情况下执行长时间运行的任务,也不必求助于使用传统的线程方法。
调试器将阻塞,因为没有任何其他运行代码可以切换到。