首页 / C# / C#-未观察到任务的异常
C#-未观察到任务的异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-未观察到任务的异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3120字,纯文字阅读大概需要5分钟。
内容图文
![C#-未观察到任务的异常](/upload/InfoBanner/zyjiaocheng/683/1715b0f91df64ebcb7bc59d2f3cf9776.jpg)
我在Application Insight Web应用程序的日志中观察到错误,但是我找不到它的去向,也没有在我的应用程序或Web api(使用Output API的.NET 4.5和Web API 2.0中找到任何奇怪的行为)和Web Api 2 Cache,Azure中的MongoDB,例如具有2个实例的Web App):
A Task’s exception(s) were not observed either by Waiting on the Task
or accessing its Exception property. As a result, the unobserved
exception was rethrown by the finalizer thread.Object reference not
set to an instance of an object.
我找不到错误的出处,我将向您展示一些示例代码,我使用了大量的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;
}
}
我的存储库是用于简化操作的标准代码,并且在单元测试中运行良好,并且我已经多次使用我的Web应用程序,并且同时使用了100多个用户,没有问题,但是在我的日志中,我有一个例外.
我也阅读了question和this one,但是我不明白如何在代码中应用,我感到很愚蠢.
编辑.
堆栈跟踪:
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#-未观察到任务的异常全部内容,希望文章能够帮你解决C#-未观察到任务的异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。