[英]How to deal with ValueTask<T> in F#?
So apparently .NET's brand new ValueTask<T>
is the leaner version of Task<T>
.所以显然 .NET 的全新
ValueTask<T>
是Task<T>
的精简版本。 That's cool, but if before I had to use Async.AwaitTask
to integrate my F# Async workflows with Task, what should I do with ValueTask now?这很酷,但是如果在我必须使用
Async.AwaitTask
将我的 F# Async 工作流与 Task 集成之前,我现在应该如何处理 ValueTask?
在实现Async.AwaitValueTask
之前(感谢 Aaron),可以使用 ValueTask 的AsTask方法, Async.AwaitTask
使用Async.AwaitTask
作为最简单的解决方案。
My OSS project "FusionTasks" can handle naturally and implicitly interprets both Task
and ValueTask
same as F# Async
type on F# async workflow:我的 OSS 项目“FusionTasks”可以在 F# 异步工作流上自然地和隐式地解释
Task
和ValueTask
与 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
}
With the new task expressions, it is explained here: https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/task-expressions#value-tasks使用新的任务表达式,这里解释: https ://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/task-expressions#value-tasks
I just implemented a System.IAsyncDisposable
which returns a System.Threading.Tasks.ValueTask
like so:我刚刚实现了一个
System.IAsyncDisposable
,它返回一个System.Threading.Tasks.ValueTask
,如下所示:
interface IAsyncDisposable with
member this.DisposeAsync(): ValueTask =
task {
use _ = client
return ()
} |> ValueTask
You can see that I'm just piping the task to ValueTask
.您可以看到我只是将任务传递给
ValueTask
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.