Как заставить задачу НЕ выполняться в потоке пользовательского интерфейса

Следующий код является упрощением кода в реальном приложении. Проблема ниже в том, что в фоновом потоке будет выполняться большая работа, а не в фоновом потоке.

    void Do()
    {
        Debug.Assert(this.Dispatcher.CheckAccess() == true);
        Task.Factory.StartNew(ShortUIWork, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
    }

    void ShortUIWork()
    {
        Debug.Assert(this.Dispatcher.CheckAccess() == true);
        Task.Factory.StartNew(LongWork, TaskCreationOptions.LongRunning);
    }

    void LongWork()
    {
        Debug.Assert(this.Dispatcher.CheckAccess() == false);
        Thread.Sleep(1000);
    }

Так что Do () обычно вызывается из контекста пользовательского интерфейса. И так же ShortUIWork, как определено TaskScheduler. Однако LongWork также вызывается в потоке пользовательского интерфейса, который, конечно, блокирует пользовательский интерфейс.

Как обеспечить, чтобы задача не выполнялась в потоке пользовательского интерфейса?

Ответы на вопрос(1)

Ваш ответ на вопрос