3

デリゲートが実行されるまで呼び出しスレッドをブロックすることを考えるとInvoke()、によってキューに入れられたデリゲートよりも何らかの優先順位が与えられるかどうか疑問に思いましたBeginInvoke()。これは、定義上、適時性はそれほど重要ではないと推測しますか?

誰か知ってる?はい、私はいつでもテストアプリを作成できましたが、それでは怠け者です;-)

4

2 に答える 2

2

Dispatcher.Invoke()は、最初の引数としてDispatcherPriorityを取ります。これは比較的大雑把な優先順位の取り決めです。それ以外の場合は、先着順でFIFOキューとして機能します。どちらかと言えば理にかなっていますが、優先度は、呼び出しキューがバックアップされている場合にのみ意味があります。避けたい状態。そして、それがそのように機能する場合、かなり厄介なバグファクトリは、マシンの速度と負荷に応じて、コードが予測できない順序で実行されます。

于 2012-04-17T13:13:07.143 に答える
2

呼び出しの唯一の違いは、BeginInvoke が非同期であるのに対し、Invoke() は同期であることです (ご指摘のとおり)。私が知る限り、Dispatcher キューで BeginInvoke よりも Invoke 呼び出しを優先することはありません (同じ優先順位が使用されたと仮定します) が、これを明確に証明するには、そのテスト アプリを作成することができます... :)

于 2012-04-17T12:58:28.997 に答える