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

本文关键字:结果 StartNew Task Factory | 更新日期: 2023-09-27 18:11:50

请告诉我是否可以并行运行多个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;

如何从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 allTasks = new Task[]{task, task1};
Task.WaitAll(allTasks);
var result = task.Result;
var result1 = task1.Result;    

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

您可以轻松运行多个任务

可以使用任务结果MSDN示例

你可以创建一个对象,它可以保存你的结果传递给任务,并更新它应该像这样

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

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