如何在使用任务时使用上一个任务的结果继续使用另一个函数?

我有WCF连接器,应该为我获取一些少量数据,通常需要20秒才能获得每个项目的数据(这很好)。 我想使用Task为我获取数据,然后使用此任务中的值添加WinForm控件。

我已经创建了包含这些数据的对象列表。

首先使用Task作为更新列表的任务,我希望在完成第一个Task创建控件后立即执行Task。

这是到目前为止的代码:

List ipVersionCounters = new List(); Task task = Task.Factory.StartNew(() => { foreach (var sitein settings.Sites) { string ip = site.ip; string version = "undefined"; using (WcfConnector wcfConnector = WcfConnector.CreateConnectorWithoutException((ip))) { if (wcfConnector != null) { version= string.Format("{0} {1} {2}", wcfConnector.VersionController.GetBranchName(), wcfConnector.VersionController.GetBuildNumber(), wcfConnector.VersionController.GetCurrentVersion()); } } counter++; ipVersionCounters.Add(new IpVersionCounter { Ip = ip, Version = Version, Counter = counter }); } return ipVersionCounters; }).ContinueWith(); AddProgressBar(ipVersionCounter); 

我不知道我是否正确的方式以及如何使用ContinueWith将值从第一种方法传递到第二种方法。

在下面的示例中,t引用上一个任务,使用Result属性从中获取返回值。

 Task task = Task.Factory.StartNew(() => { // Background work }).ContinueWith((t) => { var ipVersionCounters = t.Result; }); 

更新

如果你想在UI线程上使用continuewith(如果你是在UI线程上启动的话)…

 Task.Factory.StartNew(() => { // Background work }).ContinueWith((t) => { // Update UI thread }, TaskScheduler.FromCurrentSynchronizationContext()); 

( 这个答案取自更多信息)