因此,显然.NET的全新ValueTask<T>是更精简的Task<T>版本。这很酷,但是如果以前我必须使用Async.AwaitTask来将我的F#异步工作流与任务集成,那么现在我应该如何处理ValueTask呢?
发布于 2018-09-19 05:06:35
在实现Async.AwaitValueTask之前(谢谢亚伦),可以使用ValueTask的AsTask方法,目前可以使用Async.AwaitTask作为最简单的解决方案。
发布于 2021-03-27 02:48:06
我的OSS项目"FusionTasks“可以自然地和隐式地处理Task和ValueTask,就像F#异步工作流中的F# Async类型一样:
let asyncTest = async {
use ms = new MemoryStream()
// FusionTasks directly interpreted Task class in F# async-workflow block.
do! ms.WriteAsync(data, 0, data.Length)
do ms.Position <- 0L
// FusionTasks directly interpreted Task<T> class in F# async-workflow block.
let! length = ms.ReadAsync(data2, 0, data2.Length)
do length |> should equal data2.Length
}发布于 2022-01-24 23:11:29
使用新的任务表达式,将在这里解释:https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/task-expressions#value-tasks
我刚刚实现了一个System.IAsyncDisposable,它返回如下所示的System.Threading.Tasks.ValueTask:
interface IAsyncDisposable with
member _.DisposeAsync(): ValueTask =
task {
use _ = client
return ()
} |> ValueTask您可以看到,我只是将任务传递给ValueTask。
https://stackoverflow.com/questions/52381049
复制相似问题