C#では、タスクawaiterが待っているか、ConfiguredTaskAwaitableが非常に簡単です。 await
。 F#に代わるものは何ですか?
let! result = ...? doSomething().ConfigureAwait(false) ...?
回答:
回答№1は4F#非同期ワークフローと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()
}