gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:42:00 26 4
gpt4 key购买 nike

例如:

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com