edifice.use_async_call#
- class edifice.use_async_call(fn_coroutine)[source]#
Bases:
Hook to call an async function from a non-async context.
The async
fn_coroutine
function can have any argument signature, but it must returnNone
. The return value is discarded.The Hook takes an async function
fn_coroutine
and returns a tuple pair of non-async functions.A non-async function with the same argument signature as the
fn_coroutine
. When called, this non-async function will start a new Task an the main Edifice thread event loop as ause_async()
Hook which callsfn_coroutine
. This non-async function is safe to call from any thread.A non-async cancellation function which can be called to cancel the
fn_coroutine
Task manually. This cancellation function is safe to call from any thread.
Example:
async def delay_print_async(message:str): await asyncio.sleep(1) print(message) delay_print, cancel_print = use_async_call(delay_print_async) delay_print("Hello World") # some time later, if we want to manually cancel the delayed print: cancel_print()
This Hook is similar to
useAsyncCallback
from https://www.npmjs.com/package/react-async-hookThis Hook is similar to create_task() , but because it uses
use_async()
, it will cancel the Task when thisedifice.component()
is unmounted, or when the function is called again.We can “debounce” a function by using this Hook on an async function which has an await asyncio.sleep() delay at the beginning of it.
- Parameters:
fn_coroutine (
Callable
[[ParamSpec
(_P_async
)],Awaitable
[None
]]) – Async Coroutine function to be run as a Task.- Return type:
tuple
[Callable
[[ParamSpec
(_P_async
)],None
],Callable
[[],None
]]- Returns:
- A tuple pair of non-async functions.
A non-async function with the same argument signature as the
fn_coroutine
.A non-async cancellation function which can be called to cancel the
fn_coroutine
Task manually.