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)