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

Ben*_*son 7 c# task task-parallel-library async-await

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

System.Threading.Tasks.Extensions有只似乎是一个ValueTask<T>结构,并且没有非通用ValueTask(没有一个类型参数).为什么没有ValueTask,如果我需要转换返回非泛型的方法Task(即方法的异步等价物void),我该ValueTask怎么办?

Kev*_*ose 6

在黑暗中拍摄,但我认为这是因为Task.CompletedTask对于大多数非通用情况来说已经足够了。

一种思考方式是作为和ValueTask<T>的并集(分别针对异步和同步情况)。因此,非泛型将是…的并集……什么都没有,所以只是一个.Task<T>TValueTaskTaskTask

我想不出非泛型实际上ValueTask与缓存已经完成的Task(事实就是如此Task.CompletedTask)不同的情况,尽管我很想了解任何情况。