2016-04-01 10 views
3

ich folgendes .fsx Skript:FSX Skript beendet, bevor async Antwort ist zurück

#r "packages/FSharp.Data/lib/net40/FSharp.Data.dll" 
open FSharp.Data 

async { let! html = Http.AsyncRequestString("http://stackoverflow.com") 
     printfn "%d" html.Length } 
|> Async.Start 

Der Code korrekt ist, da es wie in fsharpi erwartet funktioniert. Ich vermute, was passiert ist, dass das Skript beendet wird, bevor die asynchrone Antwort zurück ist. Was ist der einfachste Weg, auf die Antwort zu warten?

+6

? Async.RunSynchronously – s952163

+1

Um den @ s952163-Kommentar zu erweitern, startet Async.Start die asynchrone Task, wartet aber nicht darauf. In 'fsharpi' endet die Aufgabe, weil' fsharpi' am Leben bleibt, nachdem der aktuelle Befehl ausgeführt wurde. Wenn Sie ein Skript ausführen, wird der Prozess beendet, sobald der Hauptthread beendet ist (kiiind von, Sie können bestimmten Threadtypen mitteilen, dass der Prozess geöffnet bleiben soll), was dieser tut, sobald der asynchrone Prozess gestartet wird (seit Async. Start wartet nicht). Mit Async.RunSynchronously wird F # angewiesen, den asynchronen Aufruf nicht nur zu starten, sondern auch zu blockieren, bis er beendet ist. – infinitypanda

+0

@infinitypanda danke für die zusätzlichen Kommentare! GiantSquid, ich poste dies als Antwort. – s952163

Antwort