例如:
第一步:绑定(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/