我在Application Insight Web应用程序的日志中看到一个错误,但是我找不到它的去向,也没有在我的应用程序或Web API(使用Output API的.NET 4.5和Web API 2.0中找到任何奇怪的行为)和Web Api 2 Cache(Azure中的MongoDB,例如具有2个实例的Web App):



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

示例 Controller :

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;

    }





}

我的存储库是用于进行简单操作的标准代码,并且在单元测试中运行良好,并且我已经多次使用我的Web应用程序,并且同时使用了100多个用户,没有问题,但是在我的日志中,我有一个异常(exception)。

我也阅读了questionthis one,但是我不明白如何在我的代码中应用,我感到很愚蠢。

编辑:更多信息:在过去的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的处理程序。

关于c# - 未观察到任务的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38514552/

10-11 01:52
查看更多