2016-08-23 16 views
1

複数の完了したタスクをTask.WhenAnyに渡すときに、Task.WhenAnyは、完了したタスクの優先度を返します。Task.WhenAnyはいくつかのタスクを他のタスクに優先させますか?

+0

なぜ完了したタスクを 'Task.WhenAny'に送りますか? – Jonesopolis

+0

いいえ。完了したタスクを追加している場合は、コレクション内で最初に完了したタスク(自然な順序で反復する、何も狂っていない)が返されます。私は順序がどこにでも指定されていることを非常に疑っているので、行動*は変わる可能性があります。タスクが完了していない場合は、*実行して完了する最初のタスクを返します。 [関連ソースコード](http://referencesource.microsoft.com#mscorlib/system/threading/Tasks/TaskFactory.cs,db51a91904616672) –

答えて

1

正確な動作を知りたい場合は、よくreference sourceを確認してください。例えば、WhenAnyhereです。

ソースを調べるとき、返されるタスクは自分のタスクではなく、内部で作成されたタスク(CompleteOnInvokePromiseインスタンスまたはその継続のいずれか)であり、Resultがあなたのタスクの1つになることに注意してください。完了したタスクをWhenAnyに渡す場合、Resultはすぐに最初に完了したタスクに設定されます。

+0

もちろん、まだ完了していないタスクが熱いと仮定して、ここにレースがあります。if 'ct'の項目が既に完成していて、' t'が呼び出しの開始時になかった '{t1、t2、ct1、ct2}'を持っていれば、 't1'と' t2'のいずれかが* * WhenAnyはまだループしていて設定しています。一言で言えば、不完全なタスクと完全なタスクが混在すると、すでに完了しているタスクの1つが返されることは確かに保証されません。 –

関連する問題