Происходит следующее: к моменту получения ответа на первый запрос служба обнаруживает, что 2 делегата прослушивают GetAssetSpotDataCompleted
(один был добавлен, когда был сделан запрос, а другой, когда был сделан второй еще невыполненный запрос).
Он вызовет обоих делегатов, он не может знать, что второй делегат предназначен только для второго невыполненного запроса. Когда вызывается первый, его код удаляет одного из делегатов из события. Когда вызывается второй, он также удаляет оставшегося делегата, оставляя GetAssetSpotDataCompleted
равным нулю.
Теперь, когда второй запрос окончательно завершается, служба находит GetAssetSpotDataCompleted
событие нулевым и ничего не делает.
Одним из решений было бы добавить обработчик событий только один раз, возможно, в тот момент, когда _myService
назначается во ViewModel.
Однако может быть и другая проблема, нет гарантии, что ответы на два невыполненных запроса будут приходить в том же порядке, в котором они были отправлены (хотя весьма вероятно, что они будут отправлены.) Возможно, будет лучше добавить IsBusy
Логическое свойство для ViewModel и установите это значение true
при выполнении невыполненного запроса, очистив его после завершения. Свяжите это свойство с элементом управления BusyIndicator
(находится в наборе инструментов). Это предотвратит взаимодействие с пользователем во время выполнения асинхронной операции, которая в конечном итоге изменит состояние пользовательского интерфейса.