4

我开始使用 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");
    }
}

有区别吗?它们似乎表现相同。

4

1 回答 1

4

不同之处在于何时Dispose()调用。如果您不使用await,则WebClientdDispose()在您开始下载之后和下载完成之前。它可能在您的特定情况下有效,但不能保证有效,因此您绝对应该await在这里使用。

于 2013-01-25T16:01:31.167 回答