首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InvokeAsync阶可靠性

InvokeAsync阶可靠性
EN

Stack Overflow用户
提问于 2013-10-11 10:19:53
回答 1查看 212关注 0票数 0

我有一个关于invokeAsync的问题,它的订单是否可靠。

示例:

代码语言:javascript
复制
//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是否会可靠地遵循我提到的执行顺序?如果有机会解决问题,有什么好的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-11 10:35:55

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

代码语言:javascript
复制
Task.Factory.StartNew(() => DoSomethingWith(filePath)).ContinueWith((
    Task resultFromPrevious) => DoSomethingElseWith(resultFromPrevious),  
    TaskScheduler.FromCurrentSynchronizationContext())

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19315744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档