summaryrefslogtreecommitdiff
path: root/example/src/main/scala/example/main.scala
diff options
context:
space:
mode:
Diffstat (limited to 'example/src/main/scala/example/main.scala')
-rw-r--r--example/src/main/scala/example/main.scala79
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)
+
+
+}