Visual Studio 给了我各种关于不要等待我的方法的MessageDialog.ShowAsync()
警告Launcher.LaunchUriAsync()
。
它说:
“考虑应用 await 关键字”
显然我不需要等待他们,但这对他们有好处吗?
等待调用显然会阻塞不好的 UI 线程 - 那么为什么 Visual Studio 会抛出这么多警告呢?
Visual Studio 给了我各种关于不要等待我的方法的MessageDialog.ShowAsync()
警告Launcher.LaunchUriAsync()
。
它说:
“考虑应用 await 关键字”
显然我不需要等待他们,但这对他们有好处吗?
等待调用显然会阻塞不好的 UI 线程 - 那么为什么 Visual Studio 会抛出这么多警告呢?
等待调用显然阻塞了不好的 UI 线程
await
实际上并没有阻止用户界面。await
暂停该方法的执行,直到等待的任务完成,然后继续该方法的其余部分。阅读有关await(C# 参考)的更多信息。
显然我不需要等待他们,但这对他们有好处吗?
如果不使用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;
}