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