Aad*_*mia 2 c# atomic atomicity
我必须在C#中进行一系列方法调用,这样,如果其中一个失败,则不应调用后续方法.简而言之,这组调用应该是原子的.我如何在C#中实现这一目标?
我认为你把"原子"这个词混淆了别的东西.原子是指操作无法中断,通常在多线程场景中完成以保护共享资源.
你想要的是正常的控制流逻辑,解决方案取决于你的方法是什么样的.
一种解决方案可能是让它们返回一个布尔值,指示它是否成功:
bool success = false;
success = MethodA();
if (!success)
return;
success = MethodB();
if (!success)
return;
// or even like this as suggested in another answer
if (MethodA() &&
MethodB() &&
MethodC())
{
Console.WriteLine("All succeeded");
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用异常并将所有方法调用包装在try-catch块中.如果其中一个失败(抛出一个异常),你的catch块将被执行,并且在try-block中的该方法调用之后没有任何东西将有机会运行.
try
{
MethodA();
MethodB();
MethodC();
}
catch (MyMethodFailedException)
{
// do something clever
}
Run Code Online (Sandbox Code Playgroud)
如果你需要回滚功能,你必须进入交易,但这是一个更大的主题.