1

Visual Studio 给了我各种关于不要等待我的方法的MessageDialog.ShowAsync()警告Launcher.LaunchUriAsync()

它说:

“考虑应用 await 关键字”

显然我不需要等待他们,但这对他们有好处吗?

等待调用显然会阻塞不好的 UI 线程 - 那么为什么 Visual Studio 会抛出这么多警告呢?

4

1 回答 1

3

等待调用显然阻塞了不好的 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;
}
于 2012-11-03T11:20:42.757 回答