Con Dispatcher
, questi verranno sempre eseguiti nello stesso ordine in cui sono stati chiamati, ma solo perché lo DispatcherPriority
è lo stesso. Questo comportamento è garantito e documentato in Dispatcher.BeginInvoke:
Se le chiamate BeginInvoke multipli sono realizzati nello stesso DispatcherPriority, saranno eseguiti nell'ordine le chiamate sono state fatte.
Detto questo, con operazioni asincrone, in genere è meglio non fare affidamento su questo comportamento. Non devi pianificare le cose che vengono eseguite in un ordine specifico se le stai chiamando come operazioni asincrone. Ciò crea efficacemente Coupling tra le operazioni asincrone e l'implementazione dello scheduler.
Se l'ordine è importante, in genere è meglio rielaborare il progetto in un modo che lo garantisca, anche se il meccanismo di pianificazione dovesse cambiare. Ciò è molto più semplice utilizzando TPL, ad esempio, poiché è possibile pianificare le operazioni e quindi pianificare le operazioni successive come continuazioni della prima attività.
fonte
2012-06-08 17:13:50
In generale, quando si scrive codice asincrono, il codice dovrebbe essere scritto in modo tale che l'ordine di invocazione * non ha importanza. * –