/ / TaskAwaiterまたはConfiguredTaskAwaitableをF#で待つ方法 - f#、async-await

F#でTaskAwaiterまたはConfiguredTaskAwaitableを待つ方法 - f#、async-await

C#では、タスクawaiterが待っているか、ConfiguredTaskAwaitableが非常に簡単です。 await。 F#に代わるものは何ですか?

let! result = ...? doSomething().ConfigureAwait(false) ...?

回答:

回答№1は4

F#非同期ワークフローとC#async-awaitキーワード完全に独立した2つのメカニズムであり、直接互換性はありません(それを可能にするラッパーがあることは間違いありません)。

タスクをF#非同期ワークフローと組み合わせる場合は、待機者ではなく実際のタスクを使用します。

let! result = Async.AwaitTask task

タスクではなくウェイターを提供するAPIをお持ちの場合は、ここでは、「 TaskAwaiter<"T>

module Async =
let fromTaskAwaiter (awaiter: TaskAwaiter<"a>) =
async {
use handle = new SemaphoreSlim(0)
awaiter.OnCompleted(fun () -> ignore (handle.Release()))
let! _ = handle.AvailableWaitHandle |> Async.AwaitWaitHandle
return awaiter.GetResult()
}