diff options
author | Jakob Odersky <jakob@odersky.com> | 2018-11-13 21:08:51 -0800 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2018-11-13 21:08:51 -0800 |
commit | 3c59af848c37e1530876e95f7321c8757855d030 (patch) | |
tree | 12599d8111377f28f36e659acd9853cd020aa908 /example/src | |
parent | 4b672ab5fc91b2b3c13e23f130f810b79ab7c928 (diff) | |
download | escale-3c59af848c37e1530876e95f7321c8757855d030.tar.gz escale-3c59af848c37e1530876e95f7321c8757855d030.tar.bz2 escale-3c59af848c37e1530876e95f7321c8757855d030.zip |
Various enhancements
- add select support for takes
- add syntax sugar
- add support for JS and Native
Diffstat (limited to 'example/src')
-rw-r--r-- | example/src/main/scala/example/main.scala | 79 |
1 files changed, 72 insertions, 7 deletions
diff --git a/example/src/main/scala/example/main.scala b/example/src/main/scala/example/main.scala index f6d0a48..a8470a2 100644 --- a/example/src/main/scala/example/main.scala +++ b/example/src/main/scala/example/main.scala @@ -1,6 +1,7 @@ package example import escale.Channel +import scala.async.Async import scala.async.Async._ import scala.concurrent.Await import scala.concurrent.ExecutionContext.Implicits.global @@ -8,8 +9,23 @@ import scala.concurrent.duration._ object Main extends App { + //val t = Channel.timeout(300) + //Await.result(t.take(), 10.seconds) + val ch = Channel[Int](0) +// Channel.select( +// ch -> {(x: Int) => println("a")}, +// ch2 -> {(x: String) => println("a")} +// ) + + val p2 = async { + var a = 0 + while ({a = await(ch.take()); a} < 5) { + println(a) + } + } + val p1 = async { await(ch.put(1)) await(ch.put(2)) @@ -17,14 +33,63 @@ object Main extends App { await(ch.put(5)) } - val p2 = async { - await(ch.take()) - await(ch.take()) - await(ch.take()) - await(ch.take()) - } - val result = Await.result(p2, 3.seconds) println(result) } + +object SelectTest extends App { + + val ch = Channel[Int](0) + val t = Channel.timeout(100) + ch.put(2) + + val out = Channel[String](1) +// +// Await.result(Channel.select(ch, t), 10.seconds) match { +// case (`t`, _) => println("timeout") +// case (`ch`, value) => println(value) +// } + + val r = async { + await(Channel.select(ch, t)) match { + case (`t`, _) => println("timeout") + case (`ch`, value: Int) => await(out.put(value.toString)), + } + await(out.take()) + } + Await.result(r, 10.seconds) + println(r) + +} + + +object Select2Test extends App { + + val ch = Channel[Int](0) + val t = Channel.timeout(100) + ch.put(2) + + val out = Channel[String](0) + // + // Await.result(Channel.select(ch, t), 10.seconds) match { + // case (`t`, _) => println("timeout") + // case (`ch`, value) => println(value) + // } + + Channel.select2( + t -> {u: Unit => println("timeout")}, + ch -> {v: Int => println(v); out.put(v.toString); ()} + ) + + val r = async { + await(Channel.select2( + t -> {u: Unit => println("timeout")}, + out -> {s: String => println(s)} + )) + } + Await.result(r, 10.seconds) + println(r) + + +} |