我尝试根据本机消息开发Microsoft Edge的扩展,并the official guide提供the example。在AppServiceConnections
方法中可以同步访问Deferrals
及其OnBackgroundActivated
的词典,但在其他事件处理方法中没有这样的内容......
所以我的问题是关于UWP App Service线程模型。是否保证一次只能执行一种事件处理方法?或者我应该提供对数据的正确访问同步吗?
AppServiceConnection
线程是否安全?我可以同时使用来自不同线程的SendMessageAsync
吗?或者我应该同步它的用法吗?
答案 0 :(得分:0)
我想你的问题是你在lock
,OnAppServiceRequestReceived
之类的事件中没有看到OnAppServicesCanceled
个关键字,这是做线程同步的,而你#&# 39;不确定你是否应该自己这样做。
我认为答案应该是否定。lock
内OnBackgroundActivated
确保设置正确的desktopBridgeConnectionIndex
或connectionIndex
。如果没有这些事件句柄中的关键字lock
,则意味着事件句柄一次只能触发一次。对于一个应用服务,如果客户端A正在连接应用服务,同时另一个客户端B要求相同的应用服务,对于这种情况,应用服务将启动相同后台任务的另一个实例。因此,对于客户端A,其应用程序服务连接对客户端应用程序B没有副作用。换句话说,每个应用程序服务连接都有自己的实例,基于一个应用程序服务连接发送的消息对其他人没有影响。您可以参考this video查看有关应用服务的更多详细信息,应用服务相对于从第25分钟开始。
如果您检查事件中的代码段,您可能会看到有代码行来判断请求来自哪个应用服务连接,例如this.desktopBridgeConnection = desktopBridgeConnections[this.currentConnectionIndex]
。您将发送消息以更正AppServiceConnection
,这应该是线程安全的。如果您在执行此操作时遇到实际的线程保存问题,则可以询问测试详细信息。