MVVMLight爲Silverlight應用程序有一個消息總線。視圖模型可以互相發送消息,因此所有這些消息都可以分離。我的問題是,發送消息是同步還是異步操作?MVVMLight消息總線單一同步/異步
在以下代碼中,主(協調)視圖模型向所有子虛擬機發送消息以加載數據。加載所有數據後,主虛擬機必須顯示一個狀態,說明所有數據已加載,該數據在變量IsAllChildViewModelsCompletedLoading 中設置。
MainVM.PopulateData()
{
IsAllChildViewModelsCompletedLoading = false; // Line 1
MessageBus.Send(new Child1VMMessage()); // Line 2
MessageBus.Send(new Child2VMMessage()); // Line 3
MessageBus.Send(new Child3VMMessage()); // Line 4
IsAllChildViewModelsCompletedLoading = true; // Line 5
}
在上面的代碼,莫非MessageBus.Send在3行等待,直到2 MessageBus.Send完成。第5行上的代碼是否只有在2,3,4上的代碼執行後才執行?或者PopulateData方法將退出更快通過設置標誌IsAllChildViewModelsCompletedLoading爲true,並且我們無法通過使用上述方法知道所有子虛擬機已完成加載嗎?
使用三個異步操作也將異步運行,因此將IsAllChildViewModelsCompletedLoading設置爲true是安全的。將所有三個操作轉換爲任務具有並行運行它們的優點。 –