我遇到一些奇怪的行为。
运行这段代码时:
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;