2012-04-17 2 views
3

Invoke()은 위임자가 실행될 때까지 호출 스레드를 차단한다는 점을 감안할 때 BeginInvoke() 대기열에 위임 된 위임자보다 우선 순위가 주어지는 지 궁금합니다. 정의에 따르면 그 중요도는 덜 중요합니다.주어진 우선 순위에 대해 Dispatcher.Invoke()와 Dispatcher.BeginInvoke()가 같습니까?

누구나 알고 계십니까? 그래, 난 항상 테스트 응용 프로그램을 채찍질 수 있지만 다음 게으른거야 ;-)

답변

2

Dispatcher.Invoke()는 DispatcherPriority를 ​​첫 번째 인수로 사용합니다. 상대적으로 우선 순위가 낮습니다. 그렇지 않으면 FIFO 큐로 작동하고, 먼저 와서 첫 번째 서브합니다. 다소 의미가있는 우선 순위는 호출 대기열이 백업 된 경우에만 의미가 있습니다. 을 원하는 조건은이 아닙니다. 그런 식으로 작동한다면 다소 불쾌한 버그 팩토리, 코드는 기계 속도와로드에 따라 예기치 않은 순서로 실행됩니다.

+0

재주문에 대한 좋은 지적. BeginInvoked 물건에 대한 실행 명령에 의존하기 때문에 Invoked 물건 우선 순위가 문제를 일으킨다는 것에 동의합니다. 건배. – GazTheDestroyer

2

Invoke()가 비동기 적이면서 BeginInvoke는 동기식입니다 (사용자가 지적한대로). 내가 아는 한, 동일한 우선 순위가 사용되었다고 가정하면 Dispatcher 큐에서 BeginInvoke를 통해 호출을 호출하지 않지만이 테스트 애플리케이션을 채찍질 할 수 있습니다. :)

관련 문제