我有一个关于invokeAsync的问题,它的订单是否可靠。
示例:
//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线程的调度程序中?或者,在这种情况下,大多数时间b的代码将首先运行,但是在奇怪的电路中,它可能是相反的,甚至更糟的是,它会在这两者之间跳过?
简单地说,我是否会在某个时候遇到这个2调用的麻烦,或者这个ok nad是否会可靠地遵循我提到的执行顺序?如果有机会解决问题,有什么好的办法吗?
发布于 2013-10-11 10:35:55
我不相信您可以对任何异步操作运行的顺序做出任何假设。但是,如果需要它们按顺序运行,则可以使用Task类执行如下操作:
Task.Factory.StartNew(() => DoSomethingWith(filePath)).ContinueWith((
Task resultFromPrevious) => DoSomethingElseWith(resultFromPrevious),
TaskScheduler.FromCurrentSynchronizationContext())在这种情况下,TaskScheduler.FromCurrentSynchronizationContext()选项将使DoSomethingElseWith方法在UI线程上运行。
您可能需要查看MSDN上的Task.ContinueWith法页面。
https://stackoverflow.com/questions/19315744
复制相似问题