Another benefit: we have separate main-thread and background-pool executors, and to construct a `Task` you have to declare in that scope which one you want to use.
Another benefit: we have separate main-thread and background-pool executors, and to construct a `Task` you have to declare in that scope which one you want to use.
fn foo(x: Input) -> Result<Task<Option<Output>>>
and then you can handle the sync error synchronously in the caller, before awaiting or storing the task.
fn foo(x: Input) -> Result<Task<Option<Output>>>
and then you can handle the sync error synchronously in the caller, before awaiting or storing the task.