Crate gj [−] [src]
A library providing high-level abstractions for event loop concurrency, heavily borrowing ideas from KJ. Allows for coordination of asynchronous tasks using promises as a basic building block.
Example
use gj::{EventLoop, Promise, ClosedEventPort}; EventLoop::top_level(|wait_scope| -> Result<(),()> { let (promise1, fulfiller1) = Promise::<(),()>::and_fulfiller(); let (promise2, fulfiller2) = Promise::<(),()>::and_fulfiller(); let promise3 = promise2.then(|_| { println!("world"); Promise::ok(()) }); let promise4 = promise1.then(move |_| { println!("hello "); fulfiller2.fulfill(()); Promise::ok(()) }); fulfiller1.fulfill(()); Promise::all(vec![promise3, promise4].into_iter()) .map(|_| Ok(())) .wait(wait_scope, &mut ClosedEventPort(())) }).expect("top level");
Macros
pry |
Like |
Structs
ClosedEventPort |
An event port that never emits any events. On wait() it returns the error it was constructed with. |
EventLoop |
A queue of events being executed in a loop on a single thread. |
ForkedPromise |
The result of |
Promise |
A computation that might eventually resolve to a value of type |
PromiseFulfiller |
A handle that can be used to fulfill or reject a promise. If you think of a promise as the receiving end of a oneshot channel, then this is the sending end. |
TaskSet |
Holds a collection of |
WaitScope |
A scope in which asynchronous programming can occur. Corresponds to the top level scope of some event loop. Can be used to wait for the result of a promise. |
Traits
EventPort |
Interface between an |
FulfillerDropped |
Specifies an error to generate when a |
TaskReaper |
Callbacks to be invoked when a task in a |