我应该等待MessageDialog和Launcher方法等异步调用吗?

时间:2012-11-03 10:59:20

标签: c# asynchronous windows-8 windows-runtime async-await

Visual Studio正在给我各种警告,不等待我的MessageDialog.ShowAsync()Launcher.LaunchUriAsync()方法。

它说:

  

“考虑应用await关键字”

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

等待调用显然会阻止UI线程,这很糟糕 - 那么为什么Visual Studio会抛出这么多警告?

1 个答案:

答案 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;
}