c# try...catch 语句在异步操作发生异常时不捕获异常

标签 c# exception

例如:

第一步:绑定(bind)UnhandledException事件。

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

第二步:

try
    {
       //at here,do asynchronous operation and throw a exception.
    }
catch (Exception ex)
   {
            Console.WriteLine("error");
   }

当异步操作抛出异常时,不调用catch代码,只触发UnhandledException事件,调用结束事件后退出应用。

我想在 catch 语句中捕获任何异常并避免退出应用程序。

============================================= ========

异步代码是异步socket操作,在socket异步接收消息事件(BeginReceive,EndReceive)中抛出OverFlowException。

throw new OverflowException("chunk size too long.");

=============================================

你是对的,现在我捕获异步操作中的异常并将其传递给原始类(这意味着异常将在同一个线程上抛出,可以尝试...可以调用catcy语句)

最佳答案

默认情况下,异步任务将在与其实例化的上下文不同的上下文中运行。因此,try/catch block 在这种情况下无效。

按照以下方式思考。

Worker worker = new HouseMaid();
try
{
    worker.DoSomeWork();
}
catch(WorkerIsSickException ex)
{
    worker.TakeMedicin();
    worker.StopWorkingAndRestForAWhile();
}

这里我们看到,当工作人员生病时,工作流程中断,异常将被处理。但是,当我们这样做时:

Worker worker = new HouseMaid();
try
{
    Worker otherWorker = new HouseMaidHelper();

    worker.DelegateWorkTo(otherWorker, CallBackWhenOTherWorkerIsDone);

    worker.GoOnDoSomethingElse();
}
catch(WorkerIsSickException ex)
{
    worker.TakeMedicin();
    worker.StopWorkingAndRestForAWhile();
}

工作 try/catch block (或者安全网,如果你愿意的话),将只申请 worker ,而不是其他 worker 。 otherWorker 有自己的工作范围。如果另一个 worker 失败了,那不应该意味着这个 worker 必须吃药。

关于c# try...catch 语句在异步操作发生异常时不捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7834271/

相关文章:

c# - 当我在服务器端使用 RadGrid telerik 控件运行 asp.net 网页时,它会生成错误吗?

c# - 如何在 C# 的泛型类型参数中使用 Switch...Case?

c# - 可能具有挑战性 : How do I implement solving logic in this puzzle solver program?

c# - 垃圾邮件发送者导致的 EndOfStreamException

java - 在 Java 中从调用者或在它调用的方法中进行所有必要的检查是否更好?

c# - unity计算相对于主摄像头的四元数

c# - LINQ(或伪代码)按邻近度对项目进行分组

ruby-on-rails - 从 Mysql2::Error 中救援

exception - 异常地使用异常

java - 从 JDK8 升级到 JDK11 后奇怪的 java.lang.InstantiationException 和 java.lang.NoSuchMethodException