如何在 C# (.NET 4.5) 中为 HttpClient.GetAsync(URI) 创建回调?

Posted

技术标签:

【中文标题】如何在 C# (.NET 4.5) 中为 HttpClient.GetAsync(URI) 创建回调?【英文标题】:How do I create a callback in C# (.NET 4.5) for HttpClient.GetAsync(URI)? 【发布时间】:2013-02-01 11:29:12 【问题描述】:

我想为 Google 搜索创建一个简单的异步请求。

根据谷歌的说法,最简单的方法是使用他们的 JSON API 和简单的 curl 请求

curl -e http://www.my-ajax-site.com \ 'https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton'

我想提取前 5 页结果并将每个结果的 URL 添加到数组中。我发现很难在 HttpClient.GetAsync 上找到任何解释清楚的教程。 我没有比这更进一步的了:

public String[] search(String term = "")

    var rq = new HttpClient();
    var uri = new Uri("https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=site:" + term);
    rq.GetAsync(uri);

我想这应该启动一个任务,这样我就不会阻塞主线程,但是我如何为请求完成注册一个回调方法?

【问题讨论】:

只需 rq.GetAsync(uri).Result 等待它。 @leppie 我不想等待它,我将使用另一个 API 来执行此操作,我可能会运行 10-15 个线程。 【参考方案1】:

由于 GetAsync 是您可以执行的任务

     rq.GetAsync(uri).ContinueWith((requestTask) => SomeMethod(requestTask););

【讨论】:

还有一个;,导致语法错误,应该是:rq.GetAsync(uri).ContinueWith((requestTask) => SomeMethod(requestTask));跨度> 异步任务完成后是否会发生这种情况?【参考方案2】:
HttpResponseMessage response = await rq.GetAsync(uri);

//put here your continuation logic. 

【讨论】:

@TimeSheep 你是什么意思?你不waitawait。阅读async/await关键字。 是的,我意识到这是一个误解......我会尝试这个,一旦我有时间完成它,我会选择适合我的答案:)

以上是关于如何在 C# (.NET 4.5) 中为 HttpClient.GetAsync(URI) 创建回调?的主要内容,如果未能解决你的问题,请参考以下文章

.NET 4.5 和 C# 中带有 HttpClient 的 HTTP HEAD 请求

如何使用 Oracle 和 SQL Server 将 .NET 4.5 C# Entity Framework 6 中的列映射为大写?

c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结转载

WPF 工具包,如何在 C# 中为日期选择器控件应用日期格式?

如何在 ASP.NET C# 中为图标创建 onClick 事件

如何在 Asp.net c# 中为 GridView 行启用双击和单击