2013-05-02 90 views
6

请让我知道我是否可以同时运行多个Task.Factory.StartNew声明。如何从Task.Factory.StartNew <>得到结果?

一些这样的事

var task = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null,"DEV")); 
var task1 = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null, "PROD")); 

如果是这样的。如何获取语句的输出并使用它。

我已经使用过如下语句。应用程序将等待直到我从线程获得输出。

var task = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null,"DEV")); 
return (List<AccessDetails>)task.ContinueWith(tsk => accdet = task.Result.ToList()).Result; 
+0

不知道如果我得到你的问题,但如果你想等到执行完成,你可以使用Task.Wait(),然后抓住Task.Result。 – Mecaveli 2013-05-02 07:53:55

+1

@Mecaveli [Task.Result](http://msdn.microsoft.com/zh-cn/library/dd321468.aspx)阻塞直到完成,如果您正在处理,则不需要先调用Task.Wait()一项任务。 – 2013-05-02 08:04:06

+0

Thx为更正。他处理多任务 - 本来就是Task.WaitAll。 – Mecaveli 2013-05-02 08:09:33

回答

1

您可以轻松地运行多个任务

您可以使用任务结果MSDN Example

您可以创建一个对象,可容纳你resullts它传递给任务和更新 应该看像这样的东西

MyResultObeject res = new MyResultObject 
var task = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(res,mirrorId, null,"DEV")); 

只是不要忘记检查任务是否已完成

11

你可以让多任务运行,并等待他们全部完成这样的:

var task = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null,"DEV"));   
var task1 = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null, "PROD")); 

var allTasks = new Task[]{task, task1}; 

Task.WaitAll(allTasks); 

var result = task.Result; 
var result1 = task1.Result;  

如果你只想等待第一个完成,你可以使用Task.WaitAny例如。

相关问题