def add_three(value): nonlocal a yield tap.Receive('key') a += 5 yield tap.Receive('key') a += 5 yield tap.Receive('key') a += 5 return 10
def acquire(x, to_cancel): yield tap.Receive(str(x)) release = yield lock.Acquire() nonlocal a a += 5 yield tap.Sequence([ tap.Receive(str(x)), tap.Sequence([ tap.Cancel(to_cancel), release, ]) if to_cancel is not None else release ])
def waits(): yield tap.Receive("msg") nonlocal a a += 1 release = yield lock.Acquire() a += 2 yield release
def receiver(): value = yield tap.Receive('key') if value < 10: broadcast_strand = yield tap.CallFork(broadcaster, (value + 1, )) receive_strand = yield tap.CallFork(receiver) yield tap.Join([broadcast_strand, receive_strand]) raise Exception("too large") return value
def receiver(): value = yield tap.Receive('key2') return value
def fn(): task = yield tap.CallFork(wake_and_fork) yield tap.Receive("wake") yield tap.Cancel(task)
def wake_and_fork(): yield tap.Fork(tap.Broadcast("wake")) yield tap.Fork(tap.Receive("hmm"))
def receiver(wait_value): value = yield tap.Receive('key', lambda x: x == wait_value) return value
def nowaits(): release = yield lock.Acquire() nonlocal a a += 5 yield tap.Receive("unlock") yield release
def acquire(): release = yield lock.Acquire() yield tap.Receive("unlock") yield release