UWP App Service线程模型

时间:2018-04-26 19:52:12

标签: c# uwp microsoft-edge microsoft-edge-extension

我尝试根据本机消息开发Microsoft Edge的扩展,并the official guide提供the example。在AppServiceConnections方法中可以同步访问Deferrals及其OnBackgroundActivated的词典,但在其他事件处理方法中没有这样的内容......

所以我的问题是关于UWP App Service线程模型。是否保证一次只能执行一种事件处理方法?或者我应该提供对数据的正确访问同步吗?

AppServiceConnection线程是否安全?我可以同时使用来自不同线程的SendMessageAsync吗?或者我应该同步它的用法吗?

1 个答案:

答案 0 :(得分:0)

我想你的问题是你在lockOnAppServiceRequestReceived之类的事件中没有看到OnAppServicesCanceled个关键字,这是做线程同步的,而你#&# 39;不确定你是否应该自己这样做。

我认为答案应该是否定。lockOnBackgroundActivated确保设置正确的desktopBridgeConnectionIndexconnectionIndex。如果没有这些事件句柄中的关键字lock,则意味着事件句柄一次只能触发一次。对于一个应用服务,如果客户端A正在连接应用服务,同时另一个客户端B要求相同的应用服务,对于这种情况,应用服务将启动相同后台任务的另一个实例。因此,对于客户端A,其应用程序服务连接对客户端应用程序B没有副作用。换句话说,每个应用程序服务连接都有自己的实例,基于一个应用程序服务连接发送的消息对其他人没有影响。您可以参考this video查看有关应用服务的更多详细信息,应用服务相对于从第25分钟开始。

如果您检查事件中的代码段,您可能会看到有代码行来判断请求来自哪个应用服务连接,例如this.desktopBridgeConnection = desktopBridgeConnections[this.currentConnectionIndex]。您将发送消息以更正AppServiceConnection ,这应该是线程安全的。如果您在执行此操作时遇到实际的线程保存问题,则可以询问测试详细信息。