如果这是一个简单的问题,请原谅我;我无法用足够通用的方式来表达它来搜索答案。
考虑这段代码:
var task = Task.Factory.StartNew(() => Whatever());
task.ContinueWith(Callback, TaskScheduler.FromCurrentSynchronizationContext())
回调方法执行的具体时间是如何确定的?
它会等到主线程当前完成它正在做的事情,还是会在异步调用完成后立即被调用?这个回调是否会在主线程返回到它之前正在做的事情之前完全执行?
最佳答案
Will it wait until the main thread is currently finished doing whatever it is doing, or will it get called immediately after the asynchronous call is complete?
当异步调用完成时,将安排继续。该调度的效果取决于调度程序(当然),但对于“正常”WPF 或 Windows 窗体消息循环,我希望它以类似于调用 Control.BeginInvoke
的方式进行调度。或 Dispatcher.BeginInvoke
- 换句话说,当“主”线程完成了在此任务之前安排的其余任务时。
我不希望主线程神奇地停止它正在做的事情并执行延续。但是,它可以使延续成为其队列中的高优先级任务。
关于c# - ContinueWith 主线程上的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11397163/