簡體   English   中英

MySql 連接方法是否支持異步編程?

[英]Does MySql Connection methods support async programming?

我正在使用一種簡單的方法連接到 MySql 數據庫,但連接到該數據庫需要一段時間,這會導致應用程序處於“無響應”模式。 現在,我可以使用異步來解決這個問題嗎?

腳本是:

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

MySQL Connector/NET(即 MySql.Data)公開了異步 ADO.NET 方法,例如MySqlConnection.OpenAsyncMySqlCommand.ExecuteNonQueryAsync ,但這些方法都是同步執行的。 這是連接器/NET 中的一個長期錯誤

您可以通過切換到 MySqlConnector( NuGetGitHub )來獲取異步數據庫操作,這是一種提供異步 I/O 和更高性能的 OSS 替代方案。

MySql.Data.MySqlClient.MySqlConnection.OpenAsync() 執行同步,而 MySqlConnector.MySqlConnection.OpenAsync() 執行異步

我相信這是可能的。 除了像下面這樣構造你的代碼( 源代碼):

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;
        }
    });
}

這與“await”關鍵字的使用相結合,將為您提供所需的結果。

//Use Async method to get data
DataSet results = await GetDataSetAsync(sConnectionString, sSQL, sqlParams);

還通過添加“ Asynchronous Processing=true ”連接屬性( )來更新連接字符串

我還建議您查看“ OpenAsync ”方法。 您可以在文檔中閱讀更多相關信息。

最后,我根據@MikaalAnwar 的回答找到了確切的答案!

我們不需要向連接字符串添加任何新選項(如Asynchronous Processing=true ); 這適用於 SQL 連接,不適用於 MySql。

那么,我們現在應該怎么做?

我們使任何被尊重的 void 具有 async 選項async 然后我們添加一個等待任務並運行它( Task.Run )。 在這項任務中,我們可以用我們的連接做任何我們想做的事情。

例如:(我們不想使用任何數據集)

private async void DBConnect(String connectionString)
{
    await Task.Run(() =>
        { 
            MySqlConnection dbConnection = new MySqlConnection(connectionString);
            dbConnection.Open();
        }
    );

}

& 我們不使用DBConnection.OpenAsync()因為 void 是異步的 & 我們使用了 await 來完成任務。

完成的:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM