C# 如何';等待&x27;WebClient.UploadStringAsync请求?

C# 如何';等待&x27;WebClient.UploadStringAsync请求?,c#,asynchronous,windows-phone-7,webclient,C#,Asynchronous,Windows Phone 7,Webclient,异步模式似乎是调用一个异步模式,然后在等待结果后产生控制,这很有意义 但是,WebClientclassUploadStringAsync方法不返回任务,而是返回void,因此不能waited。相反,可以定义事件处理程序。e、 g public async Task FlushQueue() { attempt = 0; WebClient wc = new WebClient(); while ((queue.Count > 0) && (atte

异步模式似乎是调用一个异步模式,然后在
等待
结果后产生控制,这很有意义

但是,
WebClient
class
UploadStringAsync
方法不返回
任务,而是返回void,因此不能
wait
ed。相反,可以定义事件处理程序。e、 g

public async Task FlushQueue() {
    attempt = 0;
    WebClient wc = new WebClient();
    while ((queue.Count > 0) && (attempt < ALLOWED_ATTEMPTS)) {

        // Copy 10 items from queue and put into buffer ...
        ...
        wc.UploadStringCompleted += (s, e) => {
            // if response 200 
            // Remove 10 sent items from queue
            // else attempt++ 
        };
        wc.UploadStringAsync("http://example.com/blah", "POST", buffer);

        // In an ideal world we could call UploadStringAsync like,
        // var response = await wc.UploadStringAsync("http://example.com/blah", "POST", buffer);
    }
}
公共异步任务刷新队列(){
尝试=0;
WebClient wc=新的WebClient();
而((queue.Count>0)和(&(尝试<允许的尝试)){
//从队列中复制10个项目并放入缓冲区。。。
...
wc.UploadStringCompleted+=(s,e)=>{
//如果响应200
//从队列中删除10个已发送项目
//其他尝试++
};
wc.UploadStringAsync(“http://example.com/blah","邮政","缓冲",;
//在理想情况下,我们可以将UploadStringAsync称为,
//var response=wait wc.UploadStringAsync(“http://example.com/blah","邮政","缓冲",;
}
}
然而,这并不等待响应,而是快速启动最大数量的web请求

在执行事件处理程序回调之前,是否有办法让流返回到
FlushQueue
之外

编辑:这适用于Windows Phone 7.5项目。

您需要使用,它返回一个
任务

4.5版之前的
WebClient
方法上的异步后缀很不幸,因为它们与您期望的TAP签名不匹配。通常,在这种情况下,建议API设计人员使用
taskancy
而不是
Async
作为后缀-这正是
WebClient
所做的。。。因此
下载StringTaskAsync


您可能还想考虑使用“<代码> WebClient < /COD> .< /P>谢谢”,这很好,查看了代码<代码>上载StrutsTraskasyc < /Cord>,它将“服务器响应”作为字符串返回,但没有说明字符串的格式——我需要HTTP RePrSunSe代码,例如200,我需要解析这个字符串吗?HttpClient现在是做这种事情的首选方式吗?这是我第一次听说。。。搜索“来自Windows Phone的POST数据”会导致WebClient、HttpWebRequest和其他,但不会导致HttpClient,例如和。是否有一个很好的资源来找出当前公认的最佳实践?据我所知,Windows Phone上的

HttpClient
作为一个NuGet软件包提供,但仍处于测试版。所以我不会称之为“首选方式”,而是“首选方式”;)更多信息:@Brendan:我没有注意到这是Windows Phone。您使用的是WP7还是WP7.5?我不知道返回的字符串的格式,但我希望它是实际内容。我不确定您是如何得到完整响应的。@Jon这是Windows Phone 7.5,我按照KooKiz的建议做了,并下载了Microsoft Libraries for
HttpClient
,它似乎工作正常。谢谢大家!