[英]How to deal with ValueTask<T> in F#?
所以顯然 .NET 的全新ValueTask<T>
是Task<T>
的精簡版本。 這很酷,但是如果在我必須使用Async.AwaitTask
將我的 F# Async 工作流與 Task 集成之前,我現在應該如何處理 ValueTask?
在實現Async.AwaitValueTask
之前(感謝 Aaron),可以使用 ValueTask 的AsTask方法, Async.AwaitTask
使用Async.AwaitTask
作為最簡單的解決方案。
我的 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
}
使用新的任務表達式,這里解釋: https ://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/task-expressions#value-tasks
我剛剛實現了一個System.IAsyncDisposable
,它返回一個System.Threading.Tasks.ValueTask
,如下所示:
interface IAsyncDisposable with
member this.DisposeAsync(): ValueTask =
task {
use _ = client
return ()
} |> ValueTask
您可以看到我只是將任務傳遞給ValueTask
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.