出现异常后,继续运行
本文关键字:继续 运行 异常 | 更新日期: 2023-09-27 18:02:17
例如:
try
{
Task1();
Task2();
Task3();
}
catch (Exception ex)
{
}
现在如果在Task1()中发生异常,Task2和Task2方法中的代码不会运行。程序停止。
我怎样才能使异常发生时,它下面的代码/方法将继续运行到最后
谢谢
异常将执行移到try块的末尾并进入catch
块。要做你想做的,你必须使用单独的try/catch
块:
try
{
Task1();
}
catch (Exception ex)
{
}
try
{
Task2();
}
catch (Exception ex)
{
}
try
{
Task3();
}
catch (Exception ex)
{
}
你可以把你的任务放在一个集合中(假设它们都有相同的签名)并循环,但最终效果是一样的:
var tasks = new Action[] {Task1, Task2, Task3};
foreach(var task in tasks)
{
try
{
task();
}
catch (Exception ex)
{
}
}
目前,在你所拥有的代码中,如果有一个异常抛出试图启动 Task1()
,那么其他两个任务没有启动。如果该任务没有错误地启动,但是导致一个任务处于Faulted
状态,则您的其他任务已正确启动。
您可能还想创建一个接受任务返回方法的方法,如果它不能生成任务,则创建一个有故障的任务。如果成功,它可以返回该任务:
public static Task WrapExceptions(this Func<Task> function)
{
try
{
return function();
}
catch (Exception e)
{
var tcs = new TaskCompletionSource<bool>();
tcs.SetException(e);
return tcs.Task;
}
}
如果您想确保即使在启动任务时出现异常也能启动所有任务,那么您需要将每个方法调用包装在自己的try/catch中。
将每条语句放到自己的try-catch块中:
try
{
Task1();
}
catch (Exception ex)
{
}
try {
Task2();
}
catch (Exception ex)
{
}
try {
Task3();
}
catch (Exception ex)
{
}