Основната разлика е, че IO просто забавя изпълнението на нещо, но го прави в рамките на текуща нишка. Задачата от друга страна е в състояние да изпълни нещо едновременно (по този начин имплицитната ExecutorService).
Освен това Task носи семантиката на Future на scalaz (Future, който е по-съставим от класическата версия на scala; Future, който ви позволява да имате по-висок контрол върху паралелността, като правите разклонението изрично дефинирано и не изпълнявате задачи паралелно веднага щом бъдат създадени). Освен това, ако прочетете източника за Future на scalaz, той ще ви насочи към Task като по-стабилна версия, която може да се използва в prod.
И накрая, имайте предвид, че TryRun на задачата връща \/[Throwable, A], докато unsafePerformIO на IO просто връща A. Това говори за по-стабилно третиране на сценарии за грешки в реалния живот.
Доколкото знам, навсякъде, където бихте използвали IO за композиране на ефекти, бихте използвали Task в реална производствена кодова база.
Ето една добра публикация в блога относно използването на Task: Публикация със задачи на Tim Perrett
person
vadimich
schedule
10.09.2015
Task
- person Chirlo   schedule 28.08.2015Task
? - person Chris Martin   schedule 28.08.2015