0

我有一个关于 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 中的代码将在 a 中的代码之前运行可能是相反的,或者更糟糕的是,在两者之间跳跃?

基本上,我是否会在某些时候遇到这 2 次调用的问题,或者这是否可以可靠地遵循我提到的执行顺序?如果有机会解决问题,关于如何使它变得更好的任何想法?

4

1 回答 1

0

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

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

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

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

于 2013-10-11T10:35:55.447 回答