繁体   English   中英

没有观察到任务的异常

[英]A Task's exception(s) were not observed

我在Application Insight Web应用程序的日志中看到了一个错误,但我找不到它的来源,我在我的应用程序或web api中找不到任何奇怪的行为(带有Web API 2.0的.NET 4.5,使用OutputCache和Web Api 2缓存 ,Azure中的MongoDB,如Web App,有2个实例):

通过等待任务或访问其Exception属性,未观察到任务的异常。 结果,终结器线程重新抛出了未观察到的异常。对象引用未设置为对象的实例。

我无法找到错误的来源,我将向您展示一些示例代码,我使用了大量的Web Api和Javascript来获取数据:

示例控制器:

public Task<IActionResult> GetDataFromMyMongoDB(string id){

         var data = await _service.GetData(id);

         if(data == null)
               return BadRequest("Error");

         return Ok(data);
}

服务:

public Task<ICollection<MyDto>> GetData(id)
{
    //Check security operations for example, or business login like this:

    var data = await _repositoryData.Where(d=>d.Id == id);

    //For example, sometimes I do some business logic operations in which
    // I use try ... catch (this code is just for show example code)

    try
    {
       var dataToJson = JSON.parse(data);

       //Dummy code dataJson to obtain a value of this and changed and update
       //to repository

       //** Code omited **//

       var bool = await _repository.UpdateManyAsync(data);

       if(bool == false)
         return null;

       else 
         {
            //Here I do typical mapper operations from my
            //entities to my DTOs 

            //** Code omited **//

            return mappedListDto; // <-- Type: ICollection<MyDto>
         }  

    }
    catch(Exception ex)
    {
       //Log in Elmah
       //Elmah stuff code here

       //** Code omited **//

       return null;

    }





}

我的存储库是进行简单操作的标准代码,在单元测试中工作正常,我多次使用我的网络应用程序和100多个用户同时没有问题,但在我的日志中,我有任务除外。

我已阅读本问题这一个 ,但我却无法理解如何在我的代码中应用,我觉得愚蠢。

编辑:更多信息:我在过去的12小时内得到了大约500个这种类型的例外但是应用程序运行正常,在过去12小时内我有大约167 K的请求。

堆栈跟踪:

System.AggregateException:
System.NullReferenceException:
   at System.Web.ThreadContext.AssociateWithCurrentThread (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)
   at System.Web.HttpApplication.OnThreadEnterPrivate (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)
   at System.Web.HttpApplication.System.Web.Util.ISyncContext.Enter (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)
   at System.Web.Util.SynchronizationHelper.SafeWrapCallback (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)
   at System.Threading.Tasks.Task.Execute (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)

有任何想法吗? 我真的很生气......非常感谢你!

可能没有错。 听起来像AppInsights有点偏执。

这通常是由两件事之一引起的。

一个是代码中的“等待任何”逻辑分叉。 这通常是使用Task.WhenAny一些代码。 我建议在代码中搜索“WhenAny”。

另一种是“火与忘”的逻辑。 这通常是调用Task.Run代码,然后忽略返回的任务。 编译器非常善于警告你关于发射后的代码(因为它几乎总是一个错误),所以首先要检查的是你的编译器警告。

由于您有一个单元测试套件,您可以为TaskScheduler.UnobservedTaskException挂钩一个处理程序,它将捕获这些异常,然后运行/调试您的测试套件并查看受到影响的测试。 如果你想安静下来AppInsights,你可以在你的产品代码,调用添加处理程序UnobservedTaskExceptionEventArgs.SetObserved

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM