继续在主线程上执行任务

use*_*225 4 c# task c#-4.0

如果这是一个简单的问题,请原谅我; 我不能用通用的方式来表达它来搜索答案.

考虑以下代码:

var task = Task.Factory.StartNew(() => Whatever());  
task.ContinueWith(Callback, TaskScheduler.FromCurrentSynchronizationContext())
Run Code Online (Sandbox Code Playgroud)

回调方法执行时究竟如何确定?

它会等到主线程当前完成正在做的事情,还是会在异步调用完成后立即调用?并且这个回调是否会在主线程返回之前执行的任何操作之前完全执行?

Jon*_*eet 8

它会等到主线程当前完成正在做的事情,还是会在异步调用完成后立即调用?

异步调用完成后,将安排继续.调度的效果取决于调度程序(当然),但对于"普通"WPF或Windows窗体消息循环,我希望它的调度方式类似于调用Control.BeginInvokeDispatcher.BeginInvoke- 换句话说,当"main"线程完成了在此之前安排的其余任务.

我不希望主线程神奇地停止它正在做的事情并执行延续.但是,它可以使延续成为队列中的高优先级任务.