2015-08-28 14 views
8

Questi due tipi ScalazQual è la differenza tra Task e IO in Scalaz?

sembrano molto simile concettualmente. Entrambi:

  • rappresentano una potenzialmente collaterali effettuare il calcolo
  • produrre un successo (A) o negativo (Exception) comportare
  • Avere Monad casi
  • può essere non sicuro non imballato con run o unsafePerformIO

Come si differenziano? Perché entrambi esistono?

+3

Controllare https://groups.google.com/forum/#!topic/scalaz/mhh_NlkHTFk, include spiegazione dal creatore di 'Task' – Chirlo

+0

@ Chirlo Grazie - quale di loro è il creatore di 'Task'? –

+0

Era Chiusano, AFAIK – Chirlo

risposta

4

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