次のコードがあります
static void Main(string[] args)
{
string url = "http://www.google.com";
Console.WriteLine(GetUrl(url).Result); // throws TaskCanceledException
Console.WriteLine(GetUrl2(url).Result);
}
public static Task<string> GetUrl(string url)
{
using (var client = new HttpClient())
{
return client.GetStringAsync(url);
}
}
public static Task<string> GetUrl2(string url)
{
using (var client = new WebClient())
{
return client.DownloadStringTaskAsync(url);
}
}
問題は、GetUrl メソッド (HttpClient の GetStringAsync を使用) が TaskCacelledException をスローすることですが、GetUrl2 メソッド (WebClient の DownloadStringTaskAsync を使用) は正しく実行されます。これは が原因using statement
ですか? 私は何が欠けていますか?
編集。この例では、これがコンソール アプリケーションであるため、タスクで Result を呼び出しています。たとえば、イベント ハンドラーで結果を待機するのが最善であることがわかっています。