C# 异常处理与异步异常处理的区别

C# 异常处理与异步异常处理的区别,c#,asp.net,web,exception-handling,C#,Asp.net,Web,Exception Handling,我创建了一个Web API应用程序,不了解全局异常处理是如何工作的。以下代码不起作用: public void Handle(ExceptionHandlerContext context){ if (context.Exception is ObjectNotFoundException) { var result = new HttpResponseMessage(HttpStatusCode.NotFound) { C

我创建了一个Web API应用程序,不了解全局异常处理是如何工作的。以下代码不起作用:

public void Handle(ExceptionHandlerContext context){
    if (context.Exception is ObjectNotFoundException)
    {
        var result = new HttpResponseMessage(HttpStatusCode.NotFound)
        {
            Content = new StringContent(context.Exception.Message),
            ReasonPhrase = "Nothing here for you"
        };

        context.Result = new ObjectNotFoundException(context.Request, result);
    }
}
但这很好:

 public override void Handle(ExceptionHandlerContext context){
    if (context.Exception is ObjectNotFoundException)
    {
        var result = new HttpResponseMessage(HttpStatusCode.NotFound)
        {
            Content = new StringContent(context.Exception.Message),
            ReasonPhrase = "Nothing here for you"
        };

        context.Result = new ObjectNotFoundException(context.Request, result);
    }
}

在代码中,唯一的区别是override关键字。因此,这就是问题的根源

由于方法句柄需要从基抽象类ExceptionHandler重写,因此需要使用override关键字

如果没有覆盖,您将创建一个新的实现并删除其中的基本实现。因此,方法调用从管道中移除,相当于没有这样的方法存在

如果你想做异步处理,你需要使用“HandleAsync”方法而不是“Handle”


任何异步处理程序都只是启用非阻塞执行。因此,如果您的日志记录/处理需要相当长的时间,或者由于管道中的请求太多而导致预期的负载,请使用async。

为什么first不工作有任何错误吗?@DhavalR否,first just Dot handler exception。原因是由于实现基类,需要使用“override”关键字。。答案中的以下详细信息您确定异步处理程序实际上正在另一个线程上运行吗?请记住,
async
本身并不意味着多线程。@BradleyUffner更正了回答。同意(异步===多线程)=false(注意===vs==)