返回

.net-将ValueTask<T>转换为非通用ValueTask

发布时间:2022-03-29 16:53:42 222

这里问的问题和这里有一个旨在为其创建一个明确的解决方案。“推荐代码”如下所示:

public static ValueTask AsValueTask(this ValueTask valueTask)
{
    if (valueTask.IsCompletedSuccessfully)
    {
        valueTask.GetResult();
        return default;
    }

    return new ValueTask(valueTask.AsTask());
}

这个答案不是最新的——ValueTask不公开GetResult()(仅公开结果属性)——问题是:

  • 我们是否需要从ValueTask中“提取”结果(以“释放”可能在此ValueTask下运行的IValueTaskSource)?
  • 如果是:
  • 是因为.GetAwaiter()上面没有的电话?
  • 或者是一个虚假的电话,以财产是保证工作var fake = valueTask.Result;? 总是(我害怕死代码消除。)
  • 如果不是,那么像下面这样的直接实现是否足够(并且是最优的)?
public static ValueTask AsNonGenericValueTask( in this ValueTask valueTask )
{
    return valueTask.IsCompletedSuccessfully ? default : new ValueTask( valueTask.AsTask() );
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(2)
按点赞数排序
用户头像