Мне неясно, что вы пытаетесь сделать, и какие части важны, но этот бит
async{ printfn "watching"
do! Async.AwaitEvent hopingobject.First
printfn "first event received"
do! Async.AwaitEvent hopingobject.Finished
printfn "I never get called"}
выглядит неправильно для меня, так как вы не начинаете слушать Finished до тех пор, пока не обработаетеВо-первых, в этот момент «Готово» уже может быть запущено.Возможно, вы хотите что-то более похожее на
async{ printfn "watching"
let! a = Async.AwaitEvent hopingobject.First |> Async.StartChild
let! b = Async.AwaitEvent hopingobject.Finished |> Async.StartChild
do! a
printfn "first event received"
do! b
printfn "hurray, I never called"}
(я пишу код в браузере, надеюсь, что это правильно.) Идея состоит в том, чтобы начать слушать оба в начале, но затем ждать сначала, а затемжди Готово.