4

如果这是一个简单的问题,请原谅我;我无法用足够通用的方式来表达它来搜索答案。

考虑这段代码:

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

回调方法何时执行是如何确定的?

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

4

1 回答 1

8

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

当异步调用完成时,将安排继续。该调度的效果取决于调度程序(当然),但对于“正常” WPF 或 Windows 窗体消息循环,我希望它以类似于调用的方式调度,Control.BeginInvoke或者Dispatcher.BeginInvoke- 换句话说,当“主”线程已完成在此之前安排的其余任务。

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

于 2012-07-09T14:34:35.800 回答