![](/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.