[−][src]Macro blocking_permit::dispatch_or_permit
Attempt to dispatch a blocking operation, or otherwise obtain a permit and run on thread, returning the result of the closure.
This helper macro is intended for use in the context of an async
block or
function. It first attempts to dispatch the closure via dispatch_rx
and
await. If a dispatch pool is not registered on the current thread, it
instead obtains a permit via blocking_permit_future
and awaits. If the
tokio-threaded feature is enabled, it will then run the closure via
BlockingPermit::run
. Otherwise it will run the closure directly.
Usage
The closure should return a Result<T, E>
where From<Canceled>
is
implemented for type E. The return type of the closure may be annotated as
necessary. The closure may also be a move
closure.
async {
dispatch_or_permit!(&semaphore, move || { /*.. blocking code..*/ });
}