C#Mysql executenonqueryasync不是异步的

时间:2016-10-27 07:41:09

标签: c# mysql asynchronous

我想获得教授这种特定类型的教师名单:

private  async void button1_Click_1(object sender, EventArgs e)
{
    dataGridView1.DataSource = await ConnectionAsync.getTeacherSHS(); 
    dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
    dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}

现在我的方法是通过点击按钮来获取它,它将为我的datagridview返回一个数据表

    mul=1
t = int(input())
s=input()
for i in range(0,2*t,2):
    k=int(s[i])
    mul=(mul*k)%1000000007
print(mul)

我的问题是,点击按钮后,呼叫阻止其他I / O我似乎无法输入其他文本框,因为它正在等待任务完成。我认为这是异步的,有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

这是因为Async连接器中的MySql.Data方法实际上并不是异步的。它们阻塞网络I / O,仅在DB操作完成时返回。 (有关更详细的说明,请参阅this question and its top answer。)MySQL bug #70111在MySQL连接器中报告此问题。

要获得真正的异步数据库操作,您必须等到修复该错误,或​​者切换到其他连接器。

我一直在开发一个新的完全异步连接器(MySqlConnector on NuGet; source on GitHub)。它支持MySqlDataAdapter以来的let title = "somthing" let body = "body text" let params = ["title":mail, "body": pass] as Dictionary<String, String>