我应该如何将返回非泛型任务的函数转换为ValueTask?

时间:2018-02-22 19:25:50

标签: c# async-await task task-parallel-library

我正在处理一些在内存中构建缓冲区的代码,然后在缓冲区填满时将其清空为TextWriter。大多数情况下,角色将直接进入缓冲区(同步)但偶尔(每4kb一次)我需要调用TextWriter.WriteAsync

the System.Threading.Tasks.Extensions package中,似乎只有ValueTask<T>结构,没有非通用ValueTask(没有类型参数)。为什么没有ValueTask,如果我需要将返回非泛型Task的方法(即void方法的异步等效项)转换为{,我该怎么办? {1}}?

1 个答案:

答案 0 :(得分:3)

在黑暗中拍摄,但我认为这是因为Task.CompletedTask足以应对大多数非一般情况。

考虑ValueTask<T>的一种方法是Task<T>T的联合(分别用于异步和同步情况)。因此,非通用ValueTask将是Task和......之间的联合,因此只需Task

我无法想到一个非通用ValueTask与缓存已经完成的Task(这是Task.CompletedTask)的实际不同的情况,尽管我很乐意了解任何事情。