【发布时间】:2012-04-17 21:13:07
【问题描述】:
鉴于Invoke() 会阻塞调用线程,直到委托被执行,我想知道它是否比BeginInvoke() 排队的委托具有任何优先级,根据定义,这会推断出及时性不那么重要?
有人知道吗?是的,我总是可以开发一个测试应用程序,但是我很懒 ;-)
【问题讨论】:
标签: c# invoke dispatcher begininvoke
鉴于Invoke() 会阻塞调用线程,直到委托被执行,我想知道它是否比BeginInvoke() 排队的委托具有任何优先级,根据定义,这会推断出及时性不那么重要?
有人知道吗?是的,我总是可以开发一个测试应用程序,但是我很懒 ;-)
【问题讨论】:
标签: c# invoke dispatcher begininvoke
Dispatcher.Invoke() 将 DispatcherPriority 作为其第一个参数。这是一个相对粗略的优先安排。否则,它的功能是 FIFO 队列,先到先得。这一切都说得通,优先级只有在调用队列被备份时才有意义。您想要避免的情况。如果它以这种方式工作,一个相当讨厌的错误工厂,代码将根据机器速度和负载以不可预测的顺序执行。
【讨论】:
调用之间的唯一区别是 BeginInvoke 是异步的,而 Invoke() 是同步的(正如您所指出的)。据我所知,在 Dispatcher 队列中 Invoke 调用优于 BeginInvoke(假设使用了相同的优先级),但为了明确地证明这一点,您可以启动该测试应用程序...... :)
【讨论】: