我遇到一些奇怪的行为。
运行这段代码时:
var foo = await actionContext.RequestContext?.Principal?.ToUserTokenAsync() ?? UserToken.UnidentifiedUser;
Principal
在运行时为null
,我得到了空引用异常。
为什么不只返回-> UserToken.UnidentifiedUser
?
答案 0 :(得分:8)
我认为这是一个优先问题。您的代码有效:
var foo = (await actionContext.RequestContext?.Principal?.ToUserTokenAsync()) ??
UserToken.UnidentifiedUser;
换句话说,如果等待结果为空,则返回UserToken.UnidentifiedUser
。但是您仍然尝试等待-这意味着您可能会等待无效的东西,否则会失败。
我怀疑你想要的是
var task = actionContext.RequestContext?.Principal?.ToUserTokenAsync()
?? Task.FromResult(UserToken.UnidentifiedUser);
var foo = await task;
或者在出现空值时避免完全等待:
var task = actionContext.RequestContext?.Principal?.ToUserTokenAsync();
var foo = task != null ? await task : UserToken.UnidentifiedUser;