2011-01-31 6 views
7

TPLには、タスクがどのような状況で実行されるかを制御する値の数がTaskContinuationOptionsになっています。たとえば、TaskContinuationOptions.NotOnCanceledは、その親が取り消されたときにタスクが実行されないようにします。なぜTPLは状態フィルタリングされたマルチタスク継続をサポートしていませんか?

ただし、これらのタスク状態フィルタは、マルチタスク継続には適用されません。あなたのような何かを行うことはできません。

TaskFactory f = new TaskFactory(); 
Task t1 = new Task (() => Thread.Sleep (5000)); 
Task t2 = new Task (() => Thread.Sleep (4000)); 
Task t3 = f.ContinueWhenAll (new Task[] { t1, t2 }, 
          (tasks) => { ... }, 
          TaskContinuationOptions.OnlyOnRanToCompletion); 

あなたが言うエラーになってしまう、"It is invalid to exclude specific continuation kinds for continuations off of multiple tasks."この条件がAPIから除外される理由である私は理解していない

。すべての前件が特定の状態で終了したときにのみタスクを実行させることが、完全に有効なユースケースではないのはなぜですか?

答えて

0

「...すべての前例が特定の状態で終了したときにのみ実行するように...」

あなたの言葉 『すべて』を注意してください、私はMSないんだけど、私はそれが関係している賭けますAll,Any,OnlyOne,AllButOneなどを含む別の全体のTaskContinuationOptions列挙型が必要であるという事実。

さらに、エリックリペットは常に「それは高価だし、時間が追加して消費する 『シンプル』な特徴を持つこれらのような質問に答えている。道moreso、基本は右に取得し、ユーザーが残りを実装させるより。

0

ContinueWhenAll手段NotOn*またはOnlyOn*を指定すると、その定義に反しても不必要でもあります。this MSDN articleの備考欄を参照してください。

を参照してください。
関連する問題