![](/img/trans.png)
[英]Working off mapped network drive throws “Unable to connect to any of the specified MySQL hosts.” exception
[英]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.