调用异步订单可靠性

时间:2013-10-11 10:19:53

标签: c# wpf invoke

我有一个关于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是否可靠地遵循我提到的执行顺序?如果有问题的机会,任何关于如何使它成为好的想法?

1 个答案:

答案 0 :(得分:0)

我不相信您可以对任何异步操作的运行顺序做出任何假设。但是,如果您需要它们按顺序运行,您可以使用Task类来执行以下操作:

Task.Factory.StartNew(() => DoSomethingWith(filePath)).ContinueWith((
    Task resultFromPrevious) => DoSomethingElseWith(resultFromPrevious),  
    TaskScheduler.FromCurrentSynchronizationContext())

在这种情况下,TaskScheduler.FromCurrentSynchronizationContext()选项将使DoSomethingElseWith方法在UI线程上运行。

您可能需要查看MSDN上的Task.ContinueWith Method页面。