首页 > 解决方案 > C# 8 可空引用类型 - [NotNullWhen(bool)] 与异步任务

问题描述

给出以下代码:

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);
}

我希望异步方法像同步方法一样工作,但它不是:(

我做错了什么还是该属性async return不支持类型?[NotNullWhen(true)]

标签: c#nullablenullable-reference-types

解决方案


推荐阅读