| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
|
| |
Sync executors don't pass Async::Future into the user-provided tasks, but
instead work with return values of the task methods, wrapping them into the
Async::Future internally. Sync tasks are of course possible since forever, but
not the API for those tasks is much cleaner, for users don't have to deal with
"future" in synchronous tasks, for instance when synchronously processing results
of an async task before passing the data to another async task.
|
|
|
|
|
|
| |
We now hold executors in shared pointers. We cannot easilly delete them, as they
are referenced from two objects (the Job they belong to, and the next job), and
the lifetime of the jobs is unclear.
|
|
|
|
|
|
| |
Error handlers don't have access to the future, so they can't mark it as finished,
so we do it after the error handler is run. This ensures that FutureWatchers will
finish.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
The future is copied an the finished boolean has to be in the shared part,
otherwise the original copy never receives the updated value.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Now calling exec() starts the first job and returns a pending Future immediately. Caller
can then use Async::FutureWatcher to wait for the future to become finished, i.e. for all
jobs to finish execution.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
As of now, Job is only front interface to a chain of Executor subclasses. Each
Executor subclass specializes for given type of execution (then, each, reduce, ...),
and the chain is then executed recursively, as we did with the original Job
implementation.
|
|
|
|
|
|
| |
We now pass our own Async::Future to each task, instead of expecting tasks
to return their future. This allows us to re-use the same Future for repeated
invocations, like in the Each task.
|
| |
|
| |
|
|
|