2011-10-26 4 views
4

TaskFactory.StartNew()新しいタスクを作成して起動し、それを返します。私は、次のコードは常に動作すると仮定するのが安全だと思います(MSDNから取られているので):Task.ContinueWithと組み合わせてTaskFactory.StartNewが動作するのはなぜですか?

Task.Factory.StartNew(() => Console.WriteLine("first")) 
    .ContinueWith(antecendent => Console.WriteLine("second")); 

これはどうやって動作しますか? .ContinueWith()が呼び出される前にタスクが開始されていない(または完了していない)ことをどのように確認できますか?

答えて

3

TPLは、コンシューマからのタスクの非同期性を抽象化するためのものです。したがって、完了したタスクでContinueWithを呼び出すと、直前のハンドラがすぐに呼び出されます。

これは、あなたがtask.RunSynchronously()続く(非同期で実行するタスクをスケジュールします)TaskFactory.StartNewTaskまたはnew Task(() => { /*...*/})を作成することができますし、常にTaskContinueWithを呼び出すことができることを意味します。基本的には、「タスクが完了したら、これを実行するようにスケジュールするか、すでに完了していればこれをスケジュールする」という意味です。

関連する問題