C# 8 обнуляемых ссылочных типов - [NotNullWhen (bool)] с асинхронным c Task <bool> - PullRequest
0 голосов
/ 16 июня 2020

Приведен следующий код:

private async Task NotNullTestAsync(bool fakeSyncParameter, bool fakeAsyncParameter)
{
    // SYNC
    var syncValue = fakeSyncParameter ? null : (int?)0;

    if (!this.NotNullWhenTrueSync(syncValue))
    {
        return;
    }

    // Works...
    Debug.WriteLine(syncValue.Value);

    // ASYNC
    var asyncValue = fakeAsyncParameter ? null : (int?)0;
    var asyncResult = await this.NotNullWhenTrueAsync(asyncValue).ConfigureAwait(false);

    if (!asyncResult)
    {
        return;
    }

    // Nullable value type may be null "error"
    Debug.WriteLine(asyncValue.Value);
}

private bool NotNullWhenTrueSync([NotNullWhen(true)]int? value)
{
    return value.HasValue;
}

private async Task<bool> NotNullWhenTrueAsync([NotNullWhen(true)]int? value)
{
    return await Task.FromResult(value.HasValue).ConfigureAwait(false);
}

Я ожидал бы, что подход asyn c работает как подход syn c, но это не так: (

Я делаю что-то не так или типы async return не поддерживаются для атрибута [NotNullWhen(true)]?

...