Ожидание с исключенным оператором слияния - PullRequest
0 голосов
/ 03 июня 2019

У меня странное поведение.

При запуске этого куска кода:

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

Principal равно null во время выполнения, и я получаю исключение нулевой ссылки.

Почему он не просто возвращается -> UserToken.UnidentifiedUser?

1 Ответ

8 голосов
/ 03 июня 2019

Я считаю, что это проблема приоритета.Ваш код эффективен:

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;

Или избегайте ожидания полностью, когда естьnull:

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