Cmdlet C# 完成

Cmdlet C# finalization

所以我在 C# 中使用 cmdlet 并使用派生自 PSCmdlet 的基本 cmdlet。

像这样:子 <- 父 <- PSCmdlet。

我们使用 Parent cmdlet 中的方法登录系统。但有时事情并不总是会出现异常、崩溃等情况。所以它并没有真正正确注销。

我的问题如下: 是否存在一种方法,我可以在 Parent cmdlet 中 implement/override 无论发生什么情况都将 运行,以便我们可以正确注销?有点像最后尝试。 我已经检查了 EndProcessing() 和 StopProcessing() 但在不可预见的情况下它们并不能真正胜任任务。

编辑:需要说明的是,存在多个 cmdlet,而且这种情况不仅仅与登录有关。根据代码和用户输入,可能会发生多种异常。

这听起来是个很好的例子 Try-catch:

try
{
    UserLogin();
    OtherMethod();
}
catch(UnauthorizedException au)
{
    Console.WriteLine("Unauthorized user... shutting down");
    //Closing Code...
    Environment.Exit(0);
}
catch(OtherException oe)
{
    //Closing Code...
    Environment.Exit(0);
}
...

您将在 UserLogin() 中(如果尚未)抛出 UnauthorizedException() 异常的位置或您用来测试凭据的任何方法。

这个概念也可以应用于您期望 抛出异常的其他代码区域。如果异常是因为代码无法正常工作,则不应使用 Try-Catch 来抑制该错误,因为它应该被更正。 Exceptions/errors 基于用户输入可以用 Try-Catch 包装。

正如@PetSerAl 所建议的那样,我的问题的解决方案是在 Parent class 中实现 IDisposable。 使用 Dispose() 然后,无论发生什么情况,我都可以添加完成 cmdlet 所需的任何方法。