设为首页 加入收藏

TOP

Scalaz(44)- concurrency :scalaz Future,尚不完整的多线程类型(三)
2017-10-10 12:12:10 】 浏览:5778
Tags:Scalaz concurrency scalaz Future 尚不 完整 线程 类型
t time is: 1465958923415!!!

scala Future和scalaz Future之间可以相互转换:

 1 import scala.concurrent.{Future => sFuture}  2 import scala.concurrent.ExecutionContext  3 import scala.util.{Success,Failure}  4 def futureTozFuture[A](sf: sFuture[A])(implicit ec: ExecutionContext): Future[A] =
 5   Future.async {cb => sf.onComplete {  6     case Success(a) => cb(a)  7 // case Failure(e) => cb(e)
 8   }}                            //> futureTozFuture: [A](sf: scala.concurrent.Future[A])(implicit ec: scala.con  9                                 //| current.ExecutionContext)scalaz.concurrent.Future[A]
10 def zFutureTosFuture[A](zf: Future[A]): sFuture[A] = { 11   val prom = scala.concurrent.Promise[A] 12  zf.unsafePerformAsync { 13      case a => prom.success(a)是 14  } 15  prom.future 16 }

突然发现scalaz Future是没有异常处理(exception)功能的。scalaz提供了concurrent.Task类型填补了Future的这部分缺陷。我们会在下篇讨论Task。
我们用上面scala Future的例子来示范scalaz Future的函数组合能力:

 1   def dbl(i: Int): Future[Int] = Future { i + i } //> dbl: (i: Int)scalaz.concurrent.Future[Int]
 2   def sqr(i: Int): Future[Int] = Future { i * i } //> sqr: (i: Int)scalaz.concurrent.Future[Int]
 3   def sum(a: Int, b: Int): Future[Int] = Future { a + b }  4                                   //> sum: (a: Int, b: Int)scalaz.concurrent.Future[Int]
 5   val fsum = for {  6     a <- dbl(3)  7     b <- sqr(a)  8     c <- sum(a,b)  9   } yield c                       //> fsum : scalaz.concurrent.Future[Int] = BindAsync(<function1>,<function1>)
10 
11  fsum.unsafePerformAsync { 12     case a => println(s"result c is:$a") 13  } 14   Thread.sleep(1000)              //> result c is:42

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇scala学习手记10 - 访问修饰符 下一篇Scalaz(45)- concurrency :Ta..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目