我遇到一些奇怪的行为。

运行这段代码时:

var foo = await actionContext.RequestContext?.Principal?.ToUserTokenAsync() ?? UserToken.UnidentifiedUser;


Principal在运行时为null,我得到一个空引用异常。

为什么不只是返回-> UserToken.UnidentifiedUser

最佳答案

我相信这是一个优先问题。您的代码有效:

var foo = (await actionContext.RequestContext?.Principal?.ToUserTokenAsync()) ??
          UserToken.UnidentifiedUser;


换句话说,如果等待的结果为null,则返回UserToken.UnidentifiedUser。但是您仍然尝试进行等待-这意味着您可能会等待无效的东西,否则会失败。

我怀疑您想要的是:

var task = actionContext.RequestContext?.Principal?.ToUserTokenAsync()
    ?? Task.FromResult(UserToken.UnidentifiedUser);
var foo = await task;


或者在出现null时避免完全等待:

var task = actionContext.RequestContext?.Principal?.ToUserTokenAsync();
var foo = task != null ? await task : UserToken.UnidentifiedUser;

10-05 18:07