2

因此,我正在使用 C# 中的 cmdlet,并使用派生自 PSCmdlet 的基本 cmdlet。

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

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

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

编辑:为了澄清,有多个 cmdlet,情况不仅仅是登录。根据代码和用户输入,可能会发生多种异常。

4

2 回答 2

1

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

于 2018-11-22T07:23:23.237 回答
0

这听起来像是一个很好的使用案例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);
}
...

您将在哪里(如果还没有)在其中或您用于测试凭据的方法中抛出UnauthorizedException()异常。UserLogin()

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

于 2018-11-21T14:50:12.620 回答