2014-06-09 55 views
0

我正在努力創建一個接受一些輸入參數的任務。然後,我想用不同的輸入參數值開始任務。我無法找到一個很好的方法來創建一個接受輸入參數的任務,稍後我可以根據需要啓動它。如何創建一個接受輸入參數的任務

我嘗試下面的方法,但是,同時創建任務,我必須提供輸入參數,我不想在這一點上提供輸入參數:

int [] intArray = new int [5] {1,2,3,4,5} ; 
Task<double []> task1 = new Task<double []> (item => CovertToDoubleArray ((int []) item), intArray) ; 

後來,我想傳遞的東西除intArray以外的其他情況。通過此實施,task1intArray綁定。

+0

您可以通過輸入參數的意思 –

+0

爲什麼不直接使用'Func鍵<>'或'Action <>'或一個委託來存儲要調用的方法,然後使用'Task'在你有參數的地方啓動它? –

+0

@ K.B:我想將Intarray傳遞給ConvertToDoubleArra方法 – User1551892

回答

2

如果我正確理解您的請求,您可以嘗試使用通用方法做到這一點。當你想創建任務時,只需調用方法。

public Task<double[]> ConvertToDouble<T>(T [] input) 
{ 
    return new Task<double []> (CovertToDoubleArray ((T[]) item), intArray) ; 
} 
+0

我也試過這個解決方案。但是,我對更聰明的東西感興趣。謝謝。 – User1551892

+1

@ User1551892更簡單_is_更聰明。 – Gusdor

2

我非常懷疑您的要求有一個解決方法。

如果你可以而不是提供實例化任務時lambda關閉的變量,那麼可以啓動一個尚未運行所需數據的任務。

2

這聽起來對我說,你實際上想要的是某種形式的任務工廠 - 也許Func<SomeParamType, Task<SomeReturnType>>。但是,您在帖子中建議的操作僅僅是而不是是應該涉及Task的一個很好的示例。

1

有幾種選擇,爲您打造,它接受輸入和輸出任務:

1:使用動作委託與命名的方法

var myTask = new Task(new Action(printSomething)); 

2:使用匿名委託

var myTask = new Task(delegate {printSomething();});  

3:使用lambda epx和方法

var myTask = new Task(() => printSomething()); 

4:Lambda和匿名方法

Task myTask = new Task(() => {printSomething();}); 

,你可以有,就像下面的方法:

static void printSomething() {Console.WriteLine("I was passed to the Task"); 
+0

如果我將某些輸入參數傳遞給方法「printSomthing(string atrb1)」 – User1551892

+0

當然可以。 – MHOOS

相關問題