2013-05-02 11 views
6

Task.Factory.StartNew文を複数同時に実行できるかどうか教えてください。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; 
+0

質問が正しいかどうかわかりませんが、実行が終了するまで待つ場合は、Task.Wait()を使用してTask.Resultを取得してください。 – Mecaveli

+1

@Mecaveli [Task.Result](http://msdn.microsoft.com/en-us/library/dd321468.aspx)は、完了するまでブロックするため、処理する場合はTask.Wait()を最初に呼び出す必要はありません単一のタスク。 –

+0

訂正のためのThx。彼は多目的な仕事に取り組んでいた。それはTask.WaitAllだった。 – Mecaveli

答えて

1
あなたが簡単に実行することができます

複数のタスク

あなたはあなたresulltsタスクに渡し保持し、それを更新することができ、オブジェクトを作成することができ、タスクがMSDN Example

を結果使用することができます になりますこの

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

のようなものだけでタスクが完了したかどうかを確認することを忘れてはいけない

11

あなたは、複数のタスクを実行してみましょう、とこのように終了させるためにそれらのすべてを待つことができます。

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を使用することができます。

関連する問題