Продолжить с задачей в главном потоке

Простите, если это простой вопрос; Я не смог сформулировать это достаточно общим образом, чтобы найти ответ.

Рассмотрим этот код:

var task = Task.Factory.StartNew(() => Whatever());  
task.ContinueWith(Callback, TaskScheduler.FromCurrentSynchronizationContext())

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

Будет ли он ждать, пока основной поток в настоящее время не завершит делать то, что он делает, или он будет вызван сразу после завершения асинхронного вызова? И будет ли этот обратный вызов полностью выполняться до того, как основной поток вернется к тому, что делал раньше?

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

Решение Вопроса

r it is doing, or will it get called immediately after the asynchronous call is complete?

Когда асинхронный вызов завершится, продолжение будетscheduled, Эффект этого планирования зависит от планировщика (конечно), но для «нормального» Цикл сообщений WPF или Windows Forms, я ожидаю, что он будет запланирован аналогично вызовуControl.BeginInvoke или жеDispatcher.BeginInvoke - другими словами, когда «основной» поток завершил остальные задачи, которые были запланированы до этого.

Я не ожидал бы, что основной поток волшебным образом остановит то, что он делает, и выполнит продолжение. Этоcould однако, сделайте продолжение приоритетной задачей в своей очереди.

 user98122509 июл. 2012 г., 16:52
Большое спасибо!

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