【问题标题】:For a given priority, are Dispatcher.Invoke() and Dispatcher.BeginInvoke() equal?对于给定的优先级, Dispatcher.Invoke() 和 Dispatcher.BeginInvoke() 是否相等?
【发布时间】:2012-04-17 21:13:07
【问题描述】:

鉴于Invoke() 会阻塞调用线程,直到委托被执行,我想知道它是否比BeginInvoke() 排队的委托具有任何优先级,根据定义,这会推断出及时性不那么重要?

有人知道吗?是的,我总是可以开发一个测试应用程序,但是我很懒 ;-)

【问题讨论】:

    标签: c# invoke dispatcher begininvoke


    【解决方案1】:

    Dispatcher.Invoke() 将 DispatcherPriority 作为其第一个参数。这是一个相对粗略的优先安排。否则,它的功能是 FIFO 队列,先到先得。这一切都说得通,优先级只有在调用队列被备份时才有意义。您想要避免的情况。如果它以这种方式工作,一个相当讨厌的错误工厂,代码将根据机器速度和负载以不可预测的顺序执行。

    【讨论】:

    • 关于重新订购的好点。我依赖 BeginInvoked 东西的执行顺序,所以我同意 Invoked 东西优先会导致问题。干杯。
    【解决方案2】:

    调用之间的唯一区别是 BeginInvoke 是异步的,而 Invoke() 是同步的(正如您所指出的)。据我所知,在 Dispatcher 队列中 Invoke 调用优于 BeginInvoke(假设使用了相同的优先级),但为了明确地证明这一点,您可以启动该测试应用程序...... :)

    【讨论】:

      猜你喜欢
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2018-11-20
      • 2016-04-04
      • 1970-01-01
      相关资源
      最近更新 更多