タスクは、何らかの方法で実行するようにスケジュールされている作業の抽象化です。CPUを集中的に使用する必要はありません。
通常、を作成するTask
と、デフォルトのスケジューラが使用され、スレッドプールでスケジュールされます(つまり、UIスレッドにはスケジュールされません)。を使用TaskScheduler.FromCurrentSynchronizationContext
して、作業をUIスレッドに投稿するスケジューラーを作成できます。
タスクと同様の動作を実現するにはBackgroundWorker
、次を使用できます。
var syncScheduler = TaskScheduler.FromCurrentSynchronizationContext(); // must be called on the UI thread
var task = ... // create the task
task.ContinueWith(t => { /* update the UI here */ }, syncScheduler);
サービス呼び出しに関して、IOを待機しているスレッドプールスレッドを無駄にしたくない場合は、この投稿で説明されているように、WCFのAPMパターンを組み合わせて使用する必要があります。TaskFactory.FromAsync