Visual Studio正在给我各种警告,不等待我的MessageDialog.ShowAsync()
和Launcher.LaunchUriAsync()
方法。
它说:
“考虑应用await关键字”
显然我不需要等待他们,但这对他们有益吗?
等待调用显然会阻止UI线程,这很糟糕 - 那么为什么Visual Studio会抛出这么多警告?
答案 0 :(得分:3)
等待通话显然会阻止不良的UI线程
await
实际上并不阻止用户界面。 await
暂停方法的执行,直到等待的任务完成,然后继续该方法的其余部分。详细了解await (C# Reference)。
显然我不需要等待他们,但这会对他们有益吗?
如果您不使用await
,则可能会在MessageDialog.ShowAsync()
完成之前完成调用MessageDialog.ShowAsync()
的方法。你不需要,但这是一种很好的做法。
例如,假设您要下载字符串并使用它,而不是等待:
async void MyAsyncMethod()
{
var client = new HttpClient();
var task = client.GetStringAsync("http://someurl.com/someAction");
// Here, GetStringAsync() may not be finished when getting the result
// and it will block the UI thread until GetStringAsync() is completed.
string result = task.Result;
textBox1.Text = result;
}
但是如果我们使用await
:
async void MyAsyncMethod()
{
var client = new HttpClient();
string result = await client.GetStringAsync("http://someurl.com/someAction");
// This method will be suspended at the await operator,
// awaiting GetStringAsync() to be completed,
// without freezing the UI, and then continues this method.
textBox1.Text = result;
}