VSCode扩展如何在自身重启时保留内存中的布尔标志不丢失?
这个需求完全可以实现,以下是两种符合要求的实现方案:
方案1:临时状态存储(实现最简单)
你可以借助VSCode扩展上下文提供的workspaceState存储标记,配合读完即删的逻辑,既满足扩展重启后可读取的要求,也不会产生持久化残留:
- 调用
vscode.workspace.updateWorkspaceFolders()前,写入标记:
await context.workspaceState.update('needReconnectRemote', true)
- 扩展激活逻辑的最开头,优先读取该标记:
const needReconnect = context.workspaceState.get<boolean>('needReconnectRemote', false) // 读取后立即删除标记,避免残留到VSCode下次启动 await context.workspaceState.update('needReconnectRemote', undefined) if (needReconnect) { // 执行远程主机重连逻辑 }
该方案的workspaceState本身默认属于工作区级持久化存储,但因为读完立刻删除的逻辑,实际不会有任何持久化残留,完全符合你的使用要求。
方案2:纯内存级标记(无任何持久化操作)
如果完全不想触碰任何持久化存储能力,可以利用临时工作区配置实现纯内存标记:
调用vscode.workspace.updateWorkspaceFolders()添加远程工作区目录时,给对应工作区的URI添加特殊查询参数作为标记,示例:
const remoteFolderUri = vscode.Uri.parse(`sftp://your-host/remote/path?needsReconnect=1`) vscode.workspace.updateWorkspaceFolders( vscode.workspace.workspaceFolders?.length ?? 0, 0, { uri: remoteFolderUri, name: "远程文件系统" } )
扩展激活时遍历所有工作区目录,检测到URI带needsReconnect=1参数则触发重连,随后再次调用updateWorkspaceFolders()替换该URI为不带查询参数的正常地址即可。
未显式保存为.code-workspace文件的工作区配置完全存于VSCode进程内存中,进程退出后自动销毁,不会产生任何持久化数据,完全匹配你对内存级标记的要求。
内容的提问来源于stack exchange,提问作者Frank Blabu
相关产品推荐
相关产品推荐

