我正在使用TPL开始工作,并就在标记为异步的调用方法中调用await的重要性提出问题,相对于只等待调用未标记为异步的方法的调用函数。
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
TBox.Text += await WebClientDownloader();
TBox.Text += await WebClientDownloadWithAwait();
}
private async static Task<string> WebClientDownloadWithAwait()
{
using (var wc = new WebClient())
{
return await wc.DownloadStringTaskAsync("http://google.com");
}
}
private static Task<string> WebClientDownloader()
{
using (var wc = new WebClient())
{
return wc.DownloadStringTaskAsync("http://google.com");
}
}
有区别吗?它们看起来表现相同。
async
方法中返回任何内容,它会被包装在一个Task
中返回。这就是async
的工作原理。 - svickasync
,那么你不能不把它包装在一个Task
中。这是个好理由。如果方法直接返回结果,那么它必须是同步的。在这种情况下,这意味着它会阻塞 UI 线程。 - svick