对于给定的优先级,Dispatcher.Invoke()和Dispatcher.BeginInvoke()是否相等?

时间:2012-04-17 11:02:36

标签: c# invoke dispatcher begininvoke

鉴于Invoke()阻塞了调用线程,直到委托被执行,我想知道它是否被赋予了BeginInvoke()排队的代理的任何优先级,根据定义,它会推断出时效性较低重要?

有人知道吗?是的,我可以随时提供一个测试应用程序,但后来我很懒; - )

2 个答案:

答案 0 :(得分:2)

调用之间的唯一区别是BeginInvoke是异步的,而Invoke()是同步的(正如你所指出的)。据我所知,没有偏好在Dispatcher队列中调用BeginInvoke上的调用(假设使用了相同的优先级),但为了明确证明这一点,你可以掀起那个测试应用......:)

答案 1 :(得分:2)

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