Полагаю, ваша проблема в том, что вы не видите ключевое слово lock
внутри событий, таких как OnAppServiceRequestReceived
, OnAppServicesCanceled
и т. Д., Что должно выполнять синхронизацию потоков, и вы не уверены, следует ли это делать самостоятельно.
Я думаю, что ответом должно быть "нет". lock
внутри OnBackgroundActivated
гарантируется правильная установка desktopBridgeConnectionIndex
или connectionIndex
. Без ключевого слова lock
внутри этих дескрипторов событий не означает, что дескриптор события должен запускаться только один раз за раз. Для одной службы приложения, если клиент A подключает службу приложения, в то же время другой клиент B запрашивает ту же службу приложения, для этого сценария служба приложения запускает другой экземпляр той же фоновой задачи. Таким образом, для клиента A, его соединения со службой приложения, нет никакого побочного эффекта для клиентского приложения B. Другими словами, каждое соединение со службой приложения имеет свой собственный экземпляр, отправка сообщений на основе одного соединения со службой приложения не имеет влияния на другие. Вы можете сослаться на это видео , чтобы посмотреть более подробную информацию о сервисе приложений, относительный сервис приложений начинается примерно с 25-й минуты.
Если вы проверите фрагмент кода внутри события, вы можете увидеть, что есть строки кода для оценки запроса от какого соединения службы приложения, например this.desktopBridgeConnection = desktopBridgeConnections[this.currentConnectionIndex]
. Вы отправите сообщение для исправления AppServiceConnection
, и это должно быть потокобезопасным. Если при выполнении этого вы столкнулись с реальной проблемой сохранения потока, вы можете задать проблему с подробностями тестирования.