5

当我对 Dispatcher 调用多个方法时,比如说 UI Thread 的 Dispatcher,

像这儿

uiDispatcher.BeginInvoke(new Action(insert_), DispatcherPriority.Normal);
uiDispatcher.BeginInvoke(new Action(add_), DispatcherPriority.Normal);
uiDispatcher.BeginInvoke(new Action(insert_), DispatcherPriority.Normal);

这些方法会按照我调用它们的顺序执行吗?

4

2 回答 2

11

使用Dispatcher,这些将始终按照调用它们的顺序执行,但这只是因为DispatcherPriority是相同的。这是有保证的行为,并记录在Dispatcher.BeginInvoke中:

如果在同一个 DispatcherPriority 上进行了多个 BeginInvoke 调用,它们将按照调用的顺序执行。

话虽如此,对于异步操作,通常最好不要依赖这种行为。如果您将它们称为异步操作,则不应计划按特定顺序执行的事情。这有效地在您的异步操作和您的调度程序实现之间创建耦合。

如果顺序确实很重要,那么即使调度机制发生变化,通常最好以保证这一点的方式重新设计设计。例如,使用 TPL 这要简单得多,因为您可以安排操作,然后将后续操作安排为第一个任务的延续。

于 2012-06-08T17:13:50.720 回答
5

来自MSDN

如果在同一个 DispatcherPriority 上进行了多个 BeginInvoke 调用,它们将按照调用的顺序执行。

于 2012-06-08T17:14:43.913 回答