2015-08-28 17 views
8

Bu iki Scalaz tipleri Scalaz'da Task ve IO arasındaki fark nedir?

scalaz.concurrent.Task[+A]

  • scalaz.effect.IO[A]
    • çok kavramsal benzer görünüyor. Her ikisi de:

      • Temsil potansiyel yan-etkileyen
      • bir başarı (A) veya başarısız (Exception)
      • ile Çizelgesi unsafely olabilir Monad örneklerini mı neden üretin hesaplama run veya unsafePerformIO

      Nasıl farklılıklar gösterirler? Neden ikisi de var?

  • +3

    Kontrol https://groups.google.com/forum/#!topic/scalaz/mhh_NlkHTFk Task' – Chirlo

    +0

    'yaratıcısı dan açıklama içerir @: Burada

    Görev kullanımı hakkında iyi bir blog yayını Chirlo Teşekkürler - hangisi 'Task'ün yaratıcısı? –

    +0

    Chiusano, AFAIK – Chirlo

    cevap

    4

    Çekirdek farkı, IO'nun yalnızca bir şeyin yürütülmesini geciktirmesi, ancak geçerli bir iş parçacığı içinde yapmasıdır. Öte yandan, görev eşzamanlı olarak (dolayısı ile gizli ExecutorService) bir şeyi yürütme yeteneğine sahiptir.

    Ayrıca, Görev, scalaz'ın Geleceğin semantiklerini taşır (Gelecek, klasik scala sürümüne göre daha olasıdır; gelecekteki formasyonu açıkça tanımlayarak ve eşzamanlı olarak kısa sürede paralel olarak görevleri yürütmeyerek daha yüksek eşzamanlılık kontrolüne sahip olmanıza olanak veren Gelecek). Dahası, eğer scalaz'ın geleceği için kaynak okursanız, sizi prod olarak kullanılabilecek daha sağlam bir versiyon olarak görevlendirirsiniz.

    Son olarak, Görev attemptRun döndüren unutmayın \/[Atılabil, A] IO unsafePerformIO sadece A döndürür iken. Bu, gerçek hayat hata senaryolarının daha sağlam bir şekilde ele alınacağını söylemektedir.

    Bildiğim kadarıyla, her yerde efekt oluşturmak için IO'yu kullanacaksınız, gerçek üretim kod tabanında Görev'i kullanırsınız. , Tim Perrett's Task Post