首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个异步调用的进度跟踪

多个异步调用的进度跟踪
EN

Stack Overflow用户
提问于 2012-01-18 06:45:50
回答 2查看 2K关注 0票数 1

有一个方法可以通过以下命令获取服务器响应

代码语言:javascript
复制
var response = (HttpWebResponse)await request.GetResponseAsync();

还需要额外的代码来设置请求。我将其封装在一个异步方法中。此方法以url作为参数。对此方法的调用再次用一个方法包装,该方法构造实际的url。

想象一下最终的方法调用是这样的:

代码语言:javascript
复制
string resultString = await GetResultString(parameter);

然后出现了以下问题:我想同时发送多个请求。我有一个参数列表。我是这样做的:

代码语言:javascript
复制
var tasks = new List<Task<string>>();
foreach(parameter in parameters)
{
    tasks.Add(GetResultString(parameter));
}
List<string> resultStrings = await TaskEx.WhenAll(tasks);

这也很好用。但是请求的数量是可变的。所以这可能是10个请求。但你也有可能触发10.000个请求,甚至100.000个请求。因此,我考虑在进度条中监控进度。但是我怎么能这样做呢?我已经看了一段this代码,但我不知道如何在我的代码中使用它。每次任务完成时,我都需要引发一个事件。但是,当任务完成时没有任何回调时该如何处理呢?

感谢并致以问候

PS:谁能告诉我如何使用复制和粘贴的代码,而不是在每一行代码前放置四个空格?我无法从高级帮助中获得任何帮助。我就是不能让它工作。我很抱歉我的英语不太好。我是德国人。:-)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-20 03:33:50

@McKay和craig1231:,你是对的。我在链接中提供的代码非常好,除了在那里使用了一个旧的AsyncCtpLib (好吧,这篇文章是在2010年底发布的)。代码需要修改一下。但我甚至在这里问这个问题之前就解决了这个问题。

我的问题是我不明白ProgressChangedEvent是什么时候被提升的。

基本上,当您实例化此类Progress<T>时,而不是从新的AsyncCtpLib版本开始实例化EventProgress<T>时,它捕获当前线程的SynchronizationContext。然后,每次从TAP方法内部调用Report时,它都会在正确的线程上引发ProgressChanged事件。

答案就在那里。不管怎样,还是要谢谢你。:)

票数 0
EN

Stack Overflow用户

发布于 2012-01-18 07:09:26

好吧,首先你得问问你自己你想要什么。如果您有10,000个请求,并且实际上能够让它们正确地等待,那么它们都在进行中。在这种情况下,您不知道每个任务是如何完成的,只知道完成了多少任务。

如果您有5个任务,则进度时间线可能如下所示:

0------------------------------------------1-23-4---5

您是否希望它显示为已完成1/5?看起来1/5是误导性的,因为你可能已经差不多完成了?

但除此之外,the link you mentioned应该涵盖您想要的内容。为什么它不起作用?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8902756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档