Add task::send and task::recv
This commit is contained in:
parent
73fed01108
commit
bd81adabff
|
@ -52,6 +52,14 @@ fn clone_chan[T](chan[T] c) -> chan[T] {
|
|||
ret unsafe::reinterpret_cast(cloned);
|
||||
}
|
||||
|
||||
fn send[T](chan[T] c, &T v) {
|
||||
c <| v;
|
||||
}
|
||||
|
||||
fn recv[T](port[T] p) -> T {
|
||||
auto v; p |> v; v
|
||||
}
|
||||
|
||||
// Spawn a task and immediately return a channel for communicating to it
|
||||
fn worker[T](fn(port[T]) f) -> rec(task task, chan[T] chan) {
|
||||
// FIXME: This is frighteningly unsafe and only works for
|
||||
|
|
|
@ -33,6 +33,14 @@ fn test_join() {
|
|||
assert task::join(failtask) == task::tr_failure;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_send_recv() {
|
||||
auto p = port[int]();
|
||||
auto c = chan(p);
|
||||
task::send(c, 10);
|
||||
assert task::recv(p) == 10;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_worker() {
|
||||
task::worker(fn(port[int] p) {
|
||||
|
|
Loading…
Reference in New Issue