Hi. Ich versuche, asynchrone Aufgaben für unsere Elmish-Anwendung zu erstellen. Ich möchte zwei asynchrone Anfragen parallel ausführen und deren Antworten auf meine Ergebnisse anwenden (applikativer Stil). Mein Problem ist, dass ich zwei (oder mehr) verschiedene Asyncs parallel starten muss und ich Async.Parallel nicht verwenden kann, da die Asyncs unterschiedliche Ergebnistypen umschließen. Das Problem ist, dass Async.StartChild nicht in Fable implementiert zu sein scheint, aber ich bekomme keine Kompilierungsfehler oder Warnungen in den Browser-Entwicklungstools.
Die asynchronen Anforderungen werden einfach nie ausgeführt. Hat jemand einen Tipp, wie ich das erreichen kann, was ich will?
type Task<'Result, 'Error> =
Async<Result<'Result, 'Error>>
let private (<!>) = Result.map
let private (<*>) = Result.apply
let map2Parallel func taskA taskB =
async {
let! result1Async = taskA |> Async.StartChild // start first request but do not wait
let! result2Async = taskB |> Async.StartChild // start second request in parallel
let! result1 = result1Async
let! result2 = result2Async
let result =
func <!> result1 <*> result2
return result
}
Erwartet: Beide asynchronen Vorgänge werden gestartet.
Aktuell: Es passiert nichts und es gibt weder einen Kompilierungsfehler noch eine Warnung/Fehler in der Browserkonsole
Hmm, du hast Recht Async.StartChild
ist noch nicht implementiert. Ich denke, das sollte möglich sein, ich schaue mir das mal an. Danke für den Hinweis! 👍
Vielen Dank!
Danke dir! Der Fix wird in der nächsten Beta-Version von Fable 1.3 veröffentlicht. Hoffentlich heute :)