具有多个并行操作和一些顺序操作的方法的任务并行库

|| 我有一个方法,其中包含一系列方法调用。这些方法调用中的一些可以立即发生,而某些则必须顺序执行。在任务并行库中实现该方法的最直接的方法是什么。所有功能都需要大量计算,并且运行时间不到一秒钟。 即
public object MyMethod(InputClass myInput)
{
    var result = method1(myInput);
    var result1 = method2(result);
    var result2 = method3(result);
    var finalResult = method4(result1, result2);
    return finalResult;   
}
方法1必须首先执行,方法2 +方法3可以并行执行,方法4必须最后执行。     
已邀请:
我相信这将达到您要求的并行度,方法2和3同时执行。
public void MyMethod(InputClass myInput)
{
    TaskFactory<object> t = new TaskFactory<object>();

    var result = method1(myInput);  // Execute Synchronously

    Task<object> t1 = t.StartNew(method2, result); // Create and start new concurrent task
    Task<object> t2 = t.StartNew(method3, result); // Create and start new concurrent task

    t1.Wait(); //Wait for completion
    t2.Wait(); //Wait for completion

    var finalResult = method4(t1.Result, t2.Result);  // Execute Synchronously
}
编辑:假设您的所有方法都返回
object
,则使用某些类型进行更新。     
您可以使用ContinueWith来分配顺序执行,如下所示;
 TaskFactory myFactory = new TaskFactory();

 myFactory.StartNew(method).ContinueWith(delegate
 {
    Task t1 = myFactory.StartNew(method2);
    Task t2 = myFactory.StartNew(method3);

    myFactory.ContinueWhenAll(new [] {t1, t2}, method4);
 });
    
F#中的异步块以及新的异步CTP旨在干净有效地解决此类问题,并允许对并发管道进行外部配置。我知道您曾说过TPL,但我确实建议您看看。
async {
   let! result = method1 myInput
   let! result1 = method2 result
   let! result2 = method3 result
   let! finalResult = method4 result1 result2
}
    

要回复问题请先登录注册