我有一个关于invokeAsync的问题,而且cal命令可以被认为是可靠的。
示例:
//Get Dispatcher of UI Thread
private Dispatcher _dsp = Dispatcher.CurrentDispatcher;
//Method called from non-UI Thread
private void a() {
//Do Stuff
b();
_dsp.InvokeAsync(() => {
//Do Stuff in UI Thread
});
}
private void b() {
//Do stuff
_dsp.InvokeAsync(() => {
//Do stuff in UI Thread
});
}
我可以理所当然地认为b的InvokeAsync中的代码将在'InvokeAsync中的代码之前运行,因为它首先被放入UI Thread的调度程序中,或者这是大多数时间b将首先运行但是在奇怪的情况可能是另一种方式,或者更糟糕的是,跳到两者之间?
基本上,我可以在某个时候遇到这个2个调用的问题,或者这个确定nad是否可靠地遵循我提到的执行顺序?如果有问题的机会,任何关于如何使它成为好的想法?
答案 0 :(得分:0)
我不相信您可以对任何异步操作的运行顺序做出任何假设。但是,如果您需要它们按顺序运行,您可以使用Task
类来执行以下操作:
Task.Factory.StartNew(() => DoSomethingWith(filePath)).ContinueWith((
Task resultFromPrevious) => DoSomethingElseWith(resultFromPrevious),
TaskScheduler.FromCurrentSynchronizationContext())
在这种情况下,TaskScheduler.FromCurrentSynchronizationContext()
选项将使DoSomethingElseWith
方法在UI线程上运行。
您可能需要查看MSDN上的Task.ContinueWith Method页面。