2013-09-07 14 views
6

Ho un calcolo asincrono come la seguente (vedi commenti in linea):Posso verificare esplicitamente la cancellazione/terminazione del calcolo asincrono?

async { 
    //... 
    do! Async.Sleep(100) //cancellation may happen during sleep 
    //... but isn't checked at the end of the sleep, so regular, non-async computations are executed here 
} 

Per imporre un controllo di cancellazione/terminare l'intera computazione asincrona prima parte computazione "normale" viene raggiunto, inserisco un efficace no-op do! Async.Sleep(1) subito dopo lo do! Async.Sleep(100). C'è un modo più pulito per fare questo? Forse anche qualcosa come do! Async.Nop.

risposta

5

Che ne dite di qualcosa di simile:

let nop = async.Return() 

allora si potrebbe utilizzare le cose come:

async { 
    // ... 
    do! Async.Sleep 100 
    do! nop 
} 
+0

perfetto, funziona benissimo! –

Problemi correlati