Какие методы вы можете использовать для создания экземпляров Async <'T> в F #?
Я вижу, что есть ряд методов расширения для веб-клиента / запроса и потока файлов, но если я хочу написать свой собственный поставщик асинхронных вычислений, как бы мне написать эти AsyncDoSomething
версии моегосинхронные DoSomething
функции?
Я знаю, что вы можете использовать делегата той же подписи для переноса исходной функции, а затем использовать Async.FromBeginEnd
в методах BeginInvoke
и EndInvoke
:
open System
let del : Func<int> = new Func<int>(fun () -> 42)
let delAsync = async {
let! res = Async.FromBeginEnd(del.BeginInvoke, del.EndInvoke)
printfn "result was %d" res
}
Async.Start delAsync
Но это кажется немного вынужденным, и это не похоже на «путь F #», так как вы должны использовать делегаты, определенные в C # или VB (из которых есть множество System.Action
и System.Func
варианты на выбор, конечно), потому что делегаты F # не поддерживают методы BeginInvoke
и EndInvoke
.
У кого-нибудь есть список различных способов, которыми вы можете написать асинхронную версию синхронной функции вF #?
Большое спасибо заранее!