我正在编写一些二进制 (C#) PowerShell cmdlet,它们包装了需要您实例化和销毁上下文对象的第 3 方库的功能。这个库有几个怪癖:
- 它需要在进程退出之前关闭其上下文,否则它会在那个时候大声地使进程崩溃。
- 它不喜欢在短时间内重复实例化和销毁上下文,或者它开始产生内部错误。
由于#2,在每个 cmdlet 中实例化和销毁库的时间跨度太短,因此我需要尽可能长时间地保持库的存活时间。因此,我计划将库上下文存储在 PowerShell 运行空间的会话状态中,以便它在运行空间的持续时间内(即交互式 shell 的生命周期)持续存在。
但是到了#1,我仍然需要在运行空间关闭之前处理库。据我了解,这发生在我的 cmdlet 生命周期之外。有什么办法可以挂钩运行空间的关闭以破坏我的库?我可以通过Runspace.StateChanged
事件在 cmdlet 进程中执行此操作,但是有没有办法确保我的库在运行空间关闭时关闭,即使在我的 cmdlet 进程完成之后也是如此?