Using Task and actions for simple threading?
You shouldn't usually use Task constructor directly, use Task.Factory.StartNew (or Run).

I also don't understand why you want to have a separate method for starting a task. It is completely superficial. It's just as useless as adding Print method that calls Console.WriteLine instead of using Console.WriteLine directly.

Normally, you just do this:

void SomeUICode ()
{
    Task.Factory.StartNew (() =&gt; {
        // This will run on thread pool
        return DoSomeExpensiveWork ();
    }).ContinueWith (result =&gt; {
        // This will run on UI thread
        UpdateUI (result);
    }, TaskScheduler.FromCurrentSynchronizationContext ());
}


It's basically  the same thing you wrote, but without abstracting it away doThreadedQuery since there's nothing to abstract away here. 

However, if you don't mind using C# 5, you can simplify things with async/await operators:

async void SomeUICode ()
{
    var result = await Task.Factory.Run (() =&gt; {
        // This will run on thread pool
        return DoSomeExpensiveWork ();
    });

    // The rest of this method will be scheduled on UI thread:
    UpdateUI (result);
}


Note the await keyword that “splits” the method and schedules the rest of it as a continuation on current synchronization context (exactly the same thing you did manually).

I declared the function as async void but you should only do this for event handlers (which have to be void). In all other cases, declare the function as async Task so the calling code has a chance to wait for it to finish:

async Task SomeUICode ()
{
    // ...
}


On a side note, doThreadedQuery is a rather unfortunate name because


.NET method names should be PascalCase, not camelCase;
There's no “query” being performed, you're just scheduling an operation.