La differenza principale è che IO ritarda semplicemente l'esecuzione di qualcosa ma lo fa all'interno di un thread corrente. L'attività invece è in grado di eseguire qualcosa contemporaneamente (quindi l'implicito ExecutorService).
Inoltre, Task svolge la semantica del futuro di Scalaz (Futuro che è più compatta della classica versione di scala; Futuro che consente di avere un maggiore controllo della concorrenza effettuando biforcazioni esplicitamente definite e non eseguendo attività in parallelo non appena istanziate). Inoltre, se si legge il codice sorgente per il futuro di scalaz, si indicherà Task come una versione più robusta che può essere utilizzata in prod.
Infine, ricordiamo che attemptRun della task ritorna \/[Throwable, A] mentre unsafePerformIO di IO restituisce solo A. Questo parla di un trattamento più efficace degli scenari di errore della vita reale.
Per quanto ne so, ovunque usereste IO per comporre effetti che usereste Task nella base di codice di produzione reale.
Ecco un buon posto blog su Gestione attività: Tim Perrett's Task Post
Controllare https://groups.google.com/forum/#!topic/scalaz/mhh_NlkHTFk, include spiegazione dal creatore di 'Task' – Chirlo
@ Chirlo Grazie - quale di loro è il creatore di 'Task'? –
Era Chiusano, AFAIK – Chirlo