如何从Task.Factory.StartNew<>?获得结果?

时间:2013-05-02 07:47:13

标签: c# asp.net multithreading

如果我可以并行运行多个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;

2 个答案:

答案 0 :(得分:12)

您可以让多个任务运行,并等待所有这些任务完成:

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

答案 1 :(得分:1)

您可以轻松运行多个任务

您可以使用任务结果MSDN Example

你可以创建一个可以让你重新组合的对象将它传递给任务并更新它 应该看起来像这样

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

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