4

私は TPL を使い始めており、async としてマークされた呼び出されたメソッド内で 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ダウンロードを開始した直後、ダウンロードが完了する前にが実行されます。特定のケースでは機能する可能性がありますが、機能することが保証されているわけではないため、ここで必ず使用する必要があります。WebClientDispose()await

于 2013-01-25T16:01:31.167 に答える