Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySql连接方法是否支持异步编程?_C#_Mysql_Winforms_Visual Studio_Asynchronous - Fatal编程技术网

C# MySql连接方法是否支持异步编程?

C# MySql连接方法是否支持异步编程?,c#,mysql,winforms,visual-studio,asynchronous,C#,Mysql,Winforms,Visual Studio,Asynchronous,我使用一种简单的方法连接到MySql数据库,但是连接到这个数据库需要一段时间&这会导致应用程序处于“无响应”模式。 现在,我可以使用async来解决这个问题吗 脚本是: Private void button_clicked() { MysqlConnection connection = new MysqlConnection(constring); connection.open(); } 我相信这是可能的。除了像下面()那样构造代码之外: 还可以通过添加“异步处理=true”连接属性()

我使用一种简单的方法连接到MySql数据库,但是连接到这个数据库需要一段时间&这会导致应用程序处于“无响应”模式。 现在,我可以使用async来解决这个问题吗

脚本是:

Private void button_clicked()
{
MysqlConnection connection = new MysqlConnection(constring);
connection.open();
}

我相信这是可能的。除了像下面()那样构造代码之外:

还可以通过添加“异步处理=true”连接属性()来更新连接字符串

我还建议您看看“OpenAsync”方法。您可以在.

MySQL Connector/NET(即MySQL.Data)公开异步ADO.NET方法中了解更多信息,例如,
MySqlConnection.OpenAsync
MySqlCommand.ExecuteNonQueryAsync
,但这些方法都是同步执行的。这是一个in连接器/网络


您可以通过切换到MySqlConnector(,)来获得异步数据库操作,MySqlConnector(,)是一种提供异步I/O和更高性能的OSS替代方案。

最后,我根据@MikaalAnwar的答案找到了确切的答案

我们不需要向连接字符串添加任何新选项(如
异步处理=true
);这是针对SQL连接的&不适用于MySql

那么,我们现在该怎么办

我们将任何被视为具有异步选项的无效项,
async
。然后我们添加一个等待任务并运行它(
task.run
)。在这项任务中,我们想用我们的关系做什么就做什么

例如:(我们不想使用任何数据集)

&我们不使用
DBConnection.OpenAsync()
,因为void是异步的&我们使用wait来完成任务


完成:)

如果你能提供一个。也许值得一读。Mjwills:非常感谢!使用
Task.Run
将阻塞代码卸载到线程池是个坏主意:相反,使用MySqlConnector获得真正的异步数据库操作。最后,
asynchronousprocessing=true
是一个SQL Server连接字符串选项;如果您尝试在MySQL中使用它,它将抛出一个错误。您应该在连接字符串中使用异步进程选项。。。没错,这是Sql的,不是Mysql的。。。但我试过这样做:1.使相关的void异步2。创建一个任务并运行它3。使任务等待4。将所有连接进程放入任务中。。。它运行良好@BradeyGrainger但我解决了它!使用Mysql.Data更好地处理任务&它在异步性能方面没有任何问题@BradleyGrainger如果必须使用MySql.Data,并且要从UI线程调用它,那么使用
Task.Run
是将该工作转移到后台线程的唯一方法。但一般来说,在大多数环境中,使用
Task.Run
使阻塞异步工作是一个坏主意:
public Task<DataSet> GetDataSetAsync(string sConnectionString, string sSQL, params SqlParameter[] parameters)
{
    return Task.Run(() =>
    {
        using (var newConnection = new SqlConnection(sConnectionString))
        using (var mySQLAdapter = new SqlDataAdapter(sSQL, newConnection))
        {
            mySQLAdapter.SelectCommand.CommandType = CommandType.Text;
            if (parameters != null) mySQLAdapter.SelectCommand.Parameters.AddRange(parameters);

            DataSet myDataSet = new DataSet();
            mySQLAdapter.Fill(myDataSet);
            return myDataSet;
        }
    });
}
//Use Async method to get data
DataSet results = await GetDataSetAsync(sConnectionString, sSQL, sqlParams);
private async void DBConnect(String connectionString)
{
    await Task.Run(() =>
        { 
            MySqlConnection dbConnection = new MySqlConnection(connectionString);
            dbConnection.Open();
        }
    );

}