# `uv_async_t` — Async handle

Async handles allow the user to “wakeup” the event loop and get a callback called from another thread.

## Data types

type uv_async_t

  Async handle type.

typedef void (*uv_async_cb)(uv_async_t *handle)

  Type definition for callback passed to `uv_async_init()`.

### Public members

N/A

See also

The `uv_handle_t` members also apply.

## API

int uv_async_init(uv_loop_t *loop, uv_async_t *async, uv_async_cb async_cb)

  Initialize the handle. A NULL callback is allowed.

  Returns:

    0 on success, or an error code < 0 on failure.

  Note

  Unlike other handle initialization functions, it immediately starts the handle.

int uv_async_send(uv_async_t *async)

  Wake up the event loop and call the async handle’s callback.

  Returns:

    0 on success, or an error code < 0 on failure.

  Note

  It’s safe to call this function from any thread. The callback will be called on the loop thread.

  Note

  `uv_async_send()` is async-signal-safe. It’s safe to call this function from a signal handler.

  Warning

  libuv will coalesce calls to `uv_async_send()`, that is, not every call to it will yield an execution of the callback. For example: if `uv_async_send()` is called 5 times in a row before the callback is called, the callback will only be called once. If `uv_async_send()` is called again after the callback was called, it will be called again.

See also

The `uv_handle_t` API functions also apply.