【问题标题】:How to get the result from Task.Factory.StartNew<>?如何从 Task.Factory.StartNew<> 获取结果?
【发布时间】:2013-05-02 07:47:13
【问题描述】:

如果我可以并行运行多个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.Wait() 然后获取 Task.Result。
  • @Mecaveli Task.Result 阻塞直到完成,如果您正在处理单个任务,则无需先调用 Task.Wait()。
  • 感谢您的更正。他正在处理多项任务 - 本来就是 ​​Task.WaitAll。

标签: c# asp.net multithreading


【解决方案1】:

你可以让多个任务运行,然后像这样等待它们全部完成:

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 例如。

【讨论】:

    【解决方案2】:

    您可以轻松运行多个任务

    您可以使用任务结果MSDN Example

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 1970-01-01
      • 2014-11-03
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2015-08-30
      • 1970-01-01
      相关资源
      最近更新 更多