[英]Xamarin.Forms PopModalAsync: A Task's exception(s) were not observed
[英]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.