2015-01-11 17 views
7

コンポーネントのユニットテストでは、コンポーネントがさまざまな時点で完了するタスクにどのように反応するかを検証する必要があります。タスクの作成方法<手動で完了できる>

私は自由に解決できるTask<>を作成するにはどうすればよいですか?

答えて

15

TaskCompletionSourceを使用すると、完全な「手動」タスクを作成できます。

デリゲートにバインドされていないタスクのプロデューサ側を表し、 は、タスクプロパティを使用してコンシューマ側にアクセスします。消費者へ

ハンドアウト完了源のTaskプロパティを、タスクを完了するために、(意志で)それにSetResultを呼び出します。また、取り消しと失敗をそれぞれ表すためにSetCanceledSetExceptionがあることに注意してください。

+0

ありがとうございます!継続が正確にいつ実行されるかを知っていますか? 'SetResult'が呼ばれると?後でいつですか?これを制御する方法はありますか? –

+0

スレッド固有ではありません。「Set ***」メソッドはどのスレッドでも呼び出せ、オブジェクト自体はスレッドセーフです。また、レースに対処するメソッドの 'TrySet ***'ファミリーを提供します。 – Ani

+0

継続は、タスクが終了すると実行されます(必要に応じて、継続上のタスク状態フィルタによって決定されます)。 – Ani

関連する問題