为什么异步扩展方法抛出System.NullReferenceException

问题描述

我有两种扩展方法,它们几乎可以做同样的事情,但其中一种是异步的

public static class ProjectExtensions
{
   public static Layout GetLayout(this Project project)
   {
      ..
   }

   public static async Task<Layout> GetLayoutAsync(this Project project)
   {
      ...
   }
}

我正在使用.?运算符,因为如果项目为null,我不想调用这些方法:

public async Task<Layout> GetMapFrameLocator()
{    
   Project currentProject = Project.Current;             // this can be null
   var layout1 = await currentProject?.GetLayoutAsync(); // throws!
   var layout2 = currentProject?.GetLayout();            // works fine
}

这两个方法实际上都没有被调用,这是我所期望的,但是异步方法会抛出一个空引用异常,这对我来说是没有意义的,因为没有任何事情会被空Project调用。我知道如果我使用.而不是.?并在静态扩展方法中处理null参数,这个问题将会消失,但是此异常的原因是什么?为什么异步方法又不同? / p>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)