1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
package example
import escale.Channel
import scala.async.Async
import scala.async.Async._
import scala.concurrent.Await
import scala.concurrent.ExecutionContext.Implicits.global
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))
await(ch.put(2))
await(ch.put(5))
}
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)
}
|