异步模式似乎是调用一个异步,然后在await
ing 一个结果后产生控制,这很有意义。
但是,WebClient
类UploadStringAsync
方法不返回 a Task
,而是返回 void ,因此无法await
编辑。相反,可以定义一个事件处理程序。例如
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);
}
}
但是,这不会等待响应,而是会通过发起最大数量的 Web 请求而迅速崩溃。
有没有办法FlushQueue
在事件处理程序回调执行之前让流量返回外部?
编辑:这是一个 Windows Phone 7.5 项目。