ConfigureAwait(false) в F#

Я использую библиотеку, которая была написана на C# и использует шаблон async / await. В C# я могу ждать чего-то, называя это ConfigureAwait(false) но когда я использую библиотеку из F#, я не вижу способа сделать то же самое?

В настоящее время я делаю SomeMethodAsync() |> Async.AwaitTask превратить его в Async Рабочий процесс F#, но как я могу сделать так же, как ConfigureAwait(false) от F# также при звонке SomeMethodAsync?


РЕДАКТИРОВАТЬ:

С некоторой потрясающей помощью в канале F# Slack и дополнительным поиском в Google я нашел хорошее объяснение того, как переключать контекст здесь: http://tomasp.net/blog/async-non-blocking-gui.aspx/

0 ответов

Это так же просто, как вызвать ConfigureAwait перед преобразованием в задачу F#.

SomeMethodAsync().ConfigureAwait(false) |>  Async.AwaitTask

Однако, если вы в основном имеете дело с асинхронными задачами C#. Для нас более понятным является вычислительное выражение TaskBuilder.fs. Доступно в nuget с использованиемdotnet add package TaskBuilder.fs.

Вам не нужно звонить вручную ConfigureAwait(false) вместо этого просто

open FSharp.Control.Tasks.V2.ContextInsensitive

И тогда каждый раз, когда ты let! это будет автоматически .ConfigureAwait(false)

Другие вопросы по тегам