3#ifndef A11_CONCURRENCY_EXECUTOR_H_
4#define A11_CONCURRENCY_EXECUTOR_H_
10#include <absl/functional/any_invocable.h>
11#include <absl/status/status.h>
12#include <absl/status/status_macros.h>
13#include <absl/status/statusor.h>
21void Schedule(absl::AnyInvocable<
void() &&> work,
22 thread::TreeOptions tree_options = {});
27 thread::TreeOptions tree_options = {});
31 absl::AnyInvocable<absl::StatusOr<T>() &&> work,
32 std::function<
void()> cancellation_hook, thread::TreeOptions tree_options) {
36 [promise = std::move(promise), work = std::move(work)]()
mutable {
37 absl::StatusOr<T> result;
38 if (thread::Cancelled()) {
39 result = absl::CancelledError(
"Task cancelled before it started");
42 result = std::move(work)();
43 }
catch (
const std::exception& error) {
44 result = absl::UnknownError(error.what());
46 result = absl::UnknownError(
"task raised a non-standard exception");
48 const absl::Status completion = promise.
SetResult(std::move(result));
51 std::move(tree_options));
54 future.SetCancellationCallbackForExecutor(
55 [cancel = std::move(cancel),
56 cancellation_hook = std::move(cancellation_hook)]() {
57 if (cancellation_hook !=
nullptr)
67 thread::TreeOptions tree_options) {
76 [
work = std::move(
work)]()
mutable -> absl::StatusOr<Unit> {
Shared handle to one asynchronous result.
Definition future.h:110
Move-only producer for a Future result.
Definition future.h:274
absl::Status SetResult(absl::StatusOr< T > result)
Complete with either a value or an error, waking every observer.
Definition future.h:328
Future< T > future() const
Return a consumer handle sharing this promise's completion state.
Definition future.h:296
Completion values used by every asynchronous A11 operation.
std::function< void()> ScheduleCancelable(absl::AnyInvocable< void() && > work, thread::TreeOptions tree_options)
Schedule work and return an idempotent cooperative-cancellation function.
Definition executor.cc:48
Task SubmitTask(absl::AnyInvocable< absl::Status() && > work, thread::TreeOptions tree_options={})
Run an operation that returns only a completion status.
Definition executor.h:73
void Schedule(absl::AnyInvocable< void() && > work, thread::TreeOptions tree_options)
Schedule work on A11's fiber pool without returning a completion handle.
Definition executor.cc:35
Future< T > Submit(absl::AnyInvocable< absl::StatusOr< T >() && > work, thread::TreeOptions tree_options)
Run status-returning work on the fiber pool and expose its Future.
Definition executor.h:66
Future< T > SubmitWithCancellationHook(absl::AnyInvocable< absl::StatusOr< T >() && > work, std::function< void()> cancellation_hook, thread::TreeOptions tree_options)
Run work on A11's fiber pool with application-specific cancellation.
Definition executor.h:30