【问题标题】:Processing order of SynchronizationContext.PostSynchronizationContext.Post的处理顺序
【发布时间】:2015-12-18 06:19:40
【问题描述】:

我使用SynchronizationContext 从 UI 线程上的后台线程调用方法。我读了this post,它询问SendPost 的区别。我理解答案,只要我需要调用方法的结果继续进行,我就会打电话给Send,只要我不关心结果,我就会打电话给Post

我的问题是:我可以对调用Posted 代表的顺序做出任何假设吗?例如,我会在日志窗口中显示Post 消息用户界面线程。但是,如果Posted 委托没有按照它们被调用的顺序进行处理,那么消息日志也会乱序显示消息。

我可以通过Send发送消息来解决这个问题,但我真的需要担心吗?

【问题讨论】:

  • This 对你来说是一本好书。您使用的是 WinForms 还是 WPF?我认为这将是特定于您正在使用的 SynchronizationContext 的实现。
  • 谢谢@YuvalItzchakov。这篇文章解释得很好。顺便说一句,我使用 WinForms。这篇文章描述了消息乱序的情况(发布发送命令时)。至少在我的代码中,我会阻止这种情况。但是我不能对每个 Post 调用的方法的作用做出任何假设。也许这是糟糕的 API 设计,但我对此不负责任。到目前为止,我认为我的问题已解决。再次感谢。

标签: .net multithreading


【解决方案1】:

您可以根据您使用的应用程序模型,通知您我们是哪个SynchronizationContext。不同的实现有不同的行为,this article 的表(图 4)很好地说明了这一点。

因此基于桌面 UI 的 SynchronizationContext 实现将保证委托的有序执行,而对于其他人则不能保证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多