簡體   English   中英

如何處理ValueTask<T> 在 F# 中?

[英]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# 異步工作流上自然地和隱式地解釋TaskValueTask與 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM