当前位置:  开发笔记 > 编程语言 > 正文

包括签名中的异步(在身体中没有等待)对程序流有什么影响?

如何解决《包括签名中的异步(在身体中没有等待)对程序流有什么影响?》经验,为你挑选了1个好方法。



1> Jon Skeet..:

我的问题是:当没有等待时,异步真的在做什么?

在可观察的行为方面:

警告说,代码仍然会同步运行

结果(包括抛出的任何异常)将被包含在一个 Task

在实现方面,编译器将生成一个状态机来处理所有的异步.但这不应该改变任何其他行为.

我不能立即想到你会看到这种消息行为的任何原因,除非由于处理异常而产生差异.如果调用代码正在捕获异常但忽略了错误的任务(反之亦然),这肯定可以解释差异.我的第一个诊断步骤是添加一些日志记录,以查看方法是否成功完成或是否在某处抛出异常.

现在你说你回来null,这是从来电者的角度来看,一定的差异:有返回的方法之间的巨大差异null的价值Task,并且方法返回一个Tasknull它的价值Result属性.也许调用者正在取消引用返回的值,并且NullReferenceException正在抛出一个?

如果这种情况,你的第一个调用端口应该是找出你以前无法看到该异常的原因 - 它表明缺少一些日志记录.然后你可以通过更改它来修复它:

return null;

return Task.FromResult(null);

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有