vscode 激活onCommand有时在有多个扩展主机时永远不会返回,

tv6aics1  于 4个月前  发布在  Vscode
关注(0)|答案(5)|浏览(47)

我目前只在Codespaces中看到过这个问题。简而言之,这个承诺永远不会完成:
vscode/src/vs/workbench/services/commands/common/commandService.ts
第71行到第72行
| | awaitthis._extensionService.activateByEvent(activationEvent); |
| | returnthis._tryExecuteCommand(id,args); |
我稍微调试了一下,似乎其中一个扩展主机管理器从未完成activateByEvent调用:
vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts
第909行到第918行
| | this._extensionHostManagers.map(extHostManager=>extHostManager.activateByEvent(activationEvent,activationKind)) |
vscode/src/vs/workbench/services/extensions/common/extensionHostManager.ts
第359行到第371行
| | privateasync_activateByEvent(activationEvent: string,activationKind: ActivationKind): Promise{ |
| | if(!this._proxy){ |
| | return; |
| | } |
| | constproxy=awaitthis._proxy; |
| | if(!proxy){ |
| | // 这个情况已经在上面覆盖并记录过了。|
| | // 即扩展主机无法启动|
| | return; |
| | } |
| | awaitproxy.activateByEvent(activationEvent,activationKind); |
| | this._resolvedActivationEvents.add(activationEvent); |
| | } |
这个问题并不每次都重现。到目前为止,我只在最近启动的Codespaces中看到过这个问题,但在我制作的3个测试设置中,每次重启代码空间后都会重现。

drnojrws

drnojrws1#

到目前为止,我复现了两种方法:

  1. 重启或启动一个当前已停止的Codespace
  2. 在文件中进行更改
  3. 将文件暂存到git SCM视图中
  4. 重启或启动与您有评论的PR关联的当前已停止的Codespace
  5. 展开评论并使用铅笔图标编辑评论
baubqpgj

baubqpgj2#

经过一起调试,我们发现网络工作扩展主机被终止了,但看起来代码并没有意识到这一点,所以它继续尝试与这个已经失效的网络工作扩展主机进行通信。这阻塞了所有随后的激活事件。

a1o7rhls

a1o7rhls3#

在调试过程中的线程截图:

实际上它应该看起来像这样:

你可以看到有一个奇怪的空线程,没有webworker iframe或扩展主机。

x7rlezfr

x7rlezfr4#

我花了大约10分钟尝试重现,但无法做到。标记为已验证。

cclgggtu

cclgggtu5#

当我再次看到这个时,重新开放。

相关问题