- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下代码
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);
}
}
我正在尝试获取 url 的字符串,问题是 GetUrl 方法(使用 HttpClient 的 GetStringAsync)抛出 TaskCacelledException,但 GetUrl2 方法(使用 WebClient 的 DownloadStringTaskAsync)运行正确。这是using语句
引起的吗?我错过了什么?
编辑。在此示例中,我在任务上调用 Result,因为这是一个控制台应用程序,我知道最好在事件处理程序中等待结果。
最佳答案
Is this caused due to using statement?
是的。在这两个代码示例中,您都在操作完成之前处理 底层客户端。两个代码示例都应这样更改:
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);
}
}
未记录异步下载在其底层客户端被处置时的行为。在您的代码使用完客户端之前,最好不要处置它们。
关于c# - HttpClient.GetStringAsync 和 WebClient.DownloadStringAsync 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27571048/
尝试实现 downloadStringAsync() 以防止在下载 一个字节 数据时 UI 卡住 10 秒。但是,即使下载完成,它也会卡住 UI,就像我使用 downloadString() 一样。
我正在使用这段代码来检索 url 内容: private ArrayList request(string query) { ArrayList parsed_output = new Arr
在这里查看文档 https://msdn.microsoft.com/en-us/library/ms144202(v=vs.110).aspx , DownloadStringAsync 有返回类型
这只发生在我的一台机器上。我认为这是一个环境配置问题。所有机器运行 ESET Smart Security 软件防火墙。有什么想法吗? using System; using System.Net;
问候, 我正在尝试使用以下代码下载网页: public partial class MainPage : PhoneApplicationPage { private static strin
我试图弄清楚如何让用户界面在我单击按钮时停止卡住,我希望按钮单击以下载字符串,我尝试了异步函数和同步函数,并添加一个线程,然后添加两个线程,但我不知道如何让它工作。这是我最近的尝试,有人可以向我解释我
第一次使用 Silverlight!按照在线教程。我正在创建一个应用程序,它允许用户使用 WebClient 从 Digg 网站搜索故事,并将它们显示在 Silverlight 控件的数据网格中。 代
目前我的 WebClient URL 有这个: WebClient Detail = new WebClient(); Detail.DownloadStringCompleted += new
我有以下代码 static void Main(string[] args) { string url = "http://www.google.com"; Conso
我正在尝试使用 DownloadStringAsync 下载一些 HTML 源代码。我的代码如下所示: WebClient client = new WebClient(); clie
我必须为我工作的网站执行以下常见任务: 从某些第三方 API 下载数据 以某种方式处理数据 在页面上显示结果 我最初使用 WebClient.DownloadStringAsync 并对结果进行处理。
我是一名优秀的程序员,十分优秀!