2011-04-14 47 views
2

我有一個方法,其中包含一系列方法調用。其中一些方法調用可以立即發生,有些必須按順序進行。在Task Parallel Library中實現它的最直接的方法是什麼?所有功能的計算量很大,需要不到一秒的時間才能運行。 即任務並行庫有一些並行操作和一些連續操作的方法

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

我相信這會給你所需的並行性水平,同時執行方法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

4

您可以使用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); 
}); 
+0

這會實現什麼?當然這仍然按順序執行所有方法。 – trickdev 2011-04-14 17:07:15

+0

對不起,我忘記了內心的一部分。我已重新編輯。 – ertan 2011-04-14 17:14:27

+0

此代碼以連續傳遞風格編寫。異步塊允許代碼以與您思考問題時相同的順序流動。編譯器爲您執行CPS轉換。 – GregC 2011-04-14 17:39:22

1

F#中的異步塊以及新的異步CTP被設計爲乾淨有效地解決這些問題,允許外部配置併發管道。我知道你會說TPL,但我建議你看看。

async { 
    let! result = method1 myInput 
    let! result1 = method2 result 
    let! result2 = method3 result 
    let! finalResult = method4 result1 result2 
} 
+0

這是完全脫離主題......但我已經花了近兩年在C#中建立一個模擬程序。與之前使用過的'語言'(主要是Matlab)相比,我現在處於一個更加快樂的地步。爲什麼我會考慮F#,人們不斷提出它,我還沒有想出它的好處。你能否幫我一點。 – PlTaylor 2011-04-14 18:10:21

+1

請參閱Brian的評論:http://stackoverflow.com/questions/2444676/understanding-f-asynchronous-programming – GregC 2011-04-14 18:20:02

+0

如果你來自MatLab宇宙,你會愛上F#,因爲它是爲科學計算而設計的。我推薦一本書:http://www.amazon.com/F-Scientists-Jon-Harrop/dp/0470242116/ref=sr_1_1?ie=UTF8&s=books&qid=1302805276&sr=8-1 – GregC 2011-04-14 18:21:50