簡體   English   中英

當嘗試使用Task.Run()在MySql中運行插入查詢時,它引發以下異常:“無法連接到任何指定的MySQL主機。”

[英]When trying to run Insert query in MySql using Task.Run(), it throws the follow exception: “Unable to connect to any of the specified MySQL hosts.”

這是代碼:

static void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) //Event Handler
{
   Time timeToSend = JsonConvert.DeserializeObject<Time>(Encoding.UTF8.GetString(e.Message));

   Task.Run(async () => await SendToMySql(timeToSend));            
}

在SendToMySql方法中,它基本上是一個插入,如下所示:

private static async Task SendToMySql(Time timeToSend)
{
        try
        {
            var connection = new MySqlConnection(string.Format(configuration["MySql:ConnectionString"], configuration["MySql:DataBaseName"]));
            await connection.OpenAsync();
            string query = "insert into resource_log (resource_value_log, creation_date) values ('" + timeToSend.Message + "',STR_TO_DATE( '" + DateTime.Now + "', '%d/%m/%Y %H:%i:%s'))";
            var cmd = new MySqlCommand(query, connection);
            await cmd.ExecuteReaderAsync();
            await connection.CloseAsync();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
        }
 } 

我使用Task.Run()調用了此方法,因為如果需要,我也希望它也異步運行。 但它引發以下異常:

“無法連接到任何指定的MySQL主機。”

這是內部的異常:

超時時間已到。 在操作完成之前超時或服務器沒有響應。

有些數據實際上已插入MySql中。

我是異步和並行編程的新手,我以這種方式進行編碼,但是我想知道這是否是在MySql上執行異步查詢的正確方法。 我這樣做的方式與此相同,但是使用MongoDb可以正常工作。 希望你們能幫助我。 謝謝。

Connector / NET(MySql.Data)中的一個長期存在的錯誤是Async方法實際上沒有Async執行: 錯誤70111

要解決此問題,您可以切換到另一個ADO.NET MySQL庫,該庫是100%異步的: GitHub上的 MySqlConnector和NuGet

盡管MySqlConnector確實實現了CloseAsync方法,但是默認實現將打開的連接同步返回到連接池,因此我建議您省略CloseAsync調用,並在使用CloseAsync僅使用using塊來Dispose連接:

using (var connection = new MySqlConnection(string.Format(configuration["MySql:ConnectionString"], configuration["MySql:DataBaseName"])))
{
    await connection.OpenAsync();
    var query = "...";
    using (var cmd = new MySqlCommand(query, connection))
        await cmd.ExecuteReaderAsync();
}

暫無
暫無

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

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