enr*_*7mc 5 c# webclient asynchttpclient
我有以下代码
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取url的字符串,问题是GetUrl方法(使用HttpClient的GetStringAsync)抛出TaskCacelledException,但GetUrl2方法(使用WebClient的DownloadStringTaskAsync)正确运行.这是由于using statement?我错过了什么?
编辑.在这个例子中,我在任务上调用Result,因为这是一个控制台应用程序,我知道最好等待事件处理程序中的结果.
这是由于使用声明引起的吗?
是.在这两个代码示例中,您将在操作完成之前处置基础客户端.这两个代码示例都应该这样改变:
public static async Task<string> GetUrlAsync(string url)
{
using (var client = new HttpClient())
{
return await client.GetStringAsync(url);
}
}
public static async Task<string> GetUrl2Async(string url)
{
using (var client = new WebClient())
{
return await client.DownloadStringTaskAsync(url);
}
}
Run Code Online (Sandbox Code Playgroud)
处理其底层客户端时异步下载的行为没有记录.在使用它们完成代码之前,最好不要处理客户端.
| 归档时间: |
|
| 查看次数: |
4960 次 |
| 最近记录: |