2012-01-17 111 views
1

有它获取与进步多个异步跟踪调用

var response = (HttpWebResponse)await request.GetResponseAsync(); 

服务器响应有额外的代码来设置请​​求的方法。我用异步方法来包装它。此方法将url作为参数。这个方法的调用再次包装一个方法,它构造了实际的url。

想象最终methodcall看起来是这样的:

string resultString = await GetResultString(parameter); 

那么下面的问题发生:我想在同一时间发送多个请求。我有一个参数列表。我这样做:

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:有人能告诉我如何使用复制粘贴&代码没有把四个空格中的每一行代码的前面?我无法从高级帮助中获得任何帮助。我只是无法得到它的工作。我很抱歉我的英语不太完美。我是德国人。 :-)

+2

复制并粘贴来自编辑器(即Visual Studio)的代码。突出显示文本并单击编辑器中的{}图标;) – craig1231 2012-01-17 23:11:41

+0

使用您在链接中提供的代码时,出现了什么问题?你可以使用该代码并向我们展示你遇到的问题吗?该代码似乎很清楚 – Prescott 2012-01-17 23:26:02

+0

我还没有将我的代码转换为链接中提供的代码。我根本不知道如何或在哪里触发该代码中的多个异步任务。在那里的某个地方,我需要做一些类似于“TaskEx.WhenAll(任务)”的东西,不是吗? – 2012-01-17 23:37:04

回答

0

@McKay和craig1231:你是对的。我在链接中提供的代码非常好,除了在那里使用了一个旧的AsyncCtpLib(好吧,这个帖子是在2010年底发布的)。代码需要重新做一点。但在我问这个问题之前,我解决了这个问题。

我的问题就是我不明白ProgressChangedEvent何时被引发。

基本上,当你实例化这个类[Progress<T>,因为新AsyncCtpLib释放不EventProgress<T>],它抓住了当前 线程的SynchronizationContext。然后,每次在TAP方法中从 调用Report时,它会在 右侧线程上引发ProgressChanged事件。

答案就在那里。不过谢谢,无论如何。 :)

0

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

如果你有5个任务,然后进行时间线可能是这样的:

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

你想说1/5完成吗?看起来1/5是误导,因为你可能差不多完成了?

但除此之外,the link you mentioned应涵盖它是你想要的。为什么它不工作?

+0

设想0 ....................... 12 .... 43 .... 5 ..(其余).. 1000 这是相当的线性仍然。所以我认为一个进度条还是不错的。 'return await wc.DownloadStringTaskAsyncEx(@“http://ancillaryasync.nickbutler.net/Murphy.ashx”,progress);''**是一个**请求的异步方法调用。如果我要这样做1000个请求,它仍然是同步的。因为我等待每一个电话结束。我找不到像'TaskEx.WhenAll(任务)'这样的方法。 – 2012-01-17 23:25:35

+0

这些评论看起来很糟糕的代码。对于那个很抱歉。我在这里很新。回答您的帖子是否回答“回答您的问题”是否可以?如果有人赞扬它,它会出现在你的帖子前。那会让人困惑,不是吗? – 2012-01-17 23:29:46

+0

@Schnerrus当然,回答你自己的问题 – McKay 2012-01-18 15:01:07