![](/img/trans.png)
[英]Is it safe in C# to omit await statement when doing an async fire and forget write to a database with ado.net
[英]WinForms UI : Using async / await and ADO.NET
我正在尝试在WinForms
中学习async
await
在其中单击按钮,我有
private async void btnSearch_Click(object sender, EventArgs e)
{
lblSearchStatus.Text = "Searching...";
await FetchFirstNames();
lblSearchStatus.Text = "searching for First Name";
await FetchLastNames();
lblSearchStatus.Text = "searching for Last Name";
}
我正在用两种希望asynchronously
调用的方法搜索FirstNames和LastNames 。 两种方法相似,代码如下所示:
private async Task FetchFirstNames()
{
...
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
SqlDataAdapter dap = new SqlDataAdapter(command);
DataTable tblMatches = new DataTable();
await Task.Run(() =>dap.Fill(tblMatches)); //it takes about 5s to complete.
...
lblSearchStatus.Text = tblMatches.Rows.Count.ToString() + " first names found.";
}
}
单击按钮时,我的意图是lblSearchStatus
的文本应从“正在搜索...” ---> “正在搜索名字” ---> “正在搜索姓氏” ---> “ 123名字/姓氏”找到名字”。 但是,当我运行它时,标签直接从“正在搜索..”更改为 “找到的123个姓氏/名字”。
我要去哪里错了?
这有点晚了,但可能会帮助其他人寻找答案:我还不能100%确定,但是好像UI线程被阻塞了,因此标签没有被刷新,如果我们使用“ Task.Run ”,它将使用另一个线程来运行资源密集型进程。
private async void button1_Click(object sender, EventArgs e)
{
lblSearchStatus.Text = "searching for First Name--";
Task task1 = Task.Run(() => FetchFirstNames());
await task1;
lblSearchStatus.Text = lblSearchStatus.Text + " searching for Last Name-";
Task task2 = Task.Run(() => FetchLastNames());
await task2;
lblSearchStatus.Text = lblSearchStatus.Text + " ---- All Done ----";
}
private async Task FetchFirstNames()
{
string str1 = "";
lblSearchStatus.Text = lblSearchStatus.Text + " Start first name -";
for (int i = 0; i < 100000000; i++)
{
str1 = i.ToString();
}
lblSearchStatus.Text = lblSearchStatus.Text + " first name: i=" + str1;
}
private async Task FetchLastNames()
{
string str1 = "";
lblSearchStatus.Text = lblSearchStatus.Text + " Start Last name -";
for (int i = 0; i < 100000000; i++)
{
str1 = i.ToString();
}
lblSearchStatus.Text = lblSearchStatus.Text + " last name: i=" + str1;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.