Cross Thread Access to Object in ViewModel
The TPL is unfortunately verbose at times. The only way I can think of to make it look "nicer" is to point ConsoleOutputCallback to a named method and delegate the creation of the Task to another method:

public static void MyMethod()
{
    Callbacks.ConsoleOutputCallback = ConsoleOutputCallback;
}

public static void ConsoleOutputCallback(string message)
{
    var scheduler = TaskScheduler.FromCurrentSynchronizationContext();

    Dispatch(
        msg =&gt; console.Document.Text += msg, 
        message, 
        scheduler
    );

    Dispatch(
        msg =&gt; someOtherNonControl.Text += msg,
        message,
        scheduler
    );
}

public static void Dispatch&lt;T&gt;(Action&lt;T&gt; action, T parameter, TaskScheduler scheduler)
{
    Task.Factory.StartNew(
        () =&gt; action(parameter), 
        CancellationToken.None, 
        TaskCreationOptions.None, 
        scheduler
    );
}