Tasks are abstractions for work that you plan to launch somehow. It does not have to be CPU intensive.
Usually, when you create it Task, it uses the default scheduler, which schedules it in the thread pool (which means that it will not be in the user interface thread). You can use it TaskScheduler.FromCurrentSynchronizationContextto create a scheduler that will send work to the user interface thread.
To perform behavior similar BackgroundWorkerto tasks, you can use:
var syncScheduler = TaskScheduler.FromCurrentSynchronizationContext();
var task = ...
task.ContinueWith(t => { }, syncScheduler);
, , -, WCF APM TaskFactory.FromAsync, .