2013-05-18 5 views
5

私は、このサンプルコードがあります。それは明らかにt1タスクからResultを返す最後のタスク<>(継続)の結果を取得しますか?

Task<int> t1= new Task<int>(()=>1); 
t1.ContinueWith(r=>1+r.Result).ContinueWith(r=>1+r.Result); 
t1.Start(); 

Console.Write(t1.Result); //1 

を。

(1である)しかし、どのように最後継続タスクからResultが得ることができる(それがあるべき3 {1 + 1 + 1})

答えて

4

ContinueWith自体はタスク返す - この場合Task<int>を。完成を待って結果を調べるなど、「元の」タスクで行うことができたこのタスクで、何か(多かれ少なかれ、手作業では続行できません)を行うことができます。

var t1 = new Task<int>(() => 1); 
var t2 = t1.ContinueWith(r => 1 + r.Result) 
      .ContinueWith(r => 1 + r.Result); 

t1.Start(); 

Console.Write(t1.Result); //1 
Console.Write(t2.Result); //3 
+0

なぜ私はcontinueWithを書きますか? –

+0

あなたは何を意味するのかよく分かりません。明確にできますか?この場合、TPLはタスクの継続が課題でもあるという意味で「一貫性」があります。 – Ani

+0

私はcontinuewithがタスクを返すことを知っています。 Q:それはかなりシンプルだと思います:t1は最初のタスクだけをリファインします。後でこのタスクは別のタスクで追加されていますが、私は外部からアクセスできません。あなたの答えでは、t2は最後の継続したタスクを参照するので、値を取得できます。あれは正しいですか ? –

関連する問題