Async++

Building blocks for C++20 coroutines

The Async++ group of projects aims to provide an extensive set of libraries and wrappers for C++20's coroutines.

It consists of a core library and wrappers for commonly used libraries.

Core library

The core library provides basic building blocks like task and generator types, a fiber implementation that supports interaction with coroutines, events, signals, mutex types, various concepts and interfaces. It also provides commonly required extensions like a timer and a dynamic thread pool implementation. In order to make usage easy it is entirely header only. It also supports custom allocators for most types and coroutines to allow usage in areas where memory allocation needs to be handled in a special way, like embedded or game applications.

Documentation
Source code

Curl Wrapper

asyncpp-curl is a c++ wrapper around the popular libcurl library. It makes the use of asynchronous network requests extremly easy by wrapping curl's multi interface and providing interoperability to coroutines. On top of that foundation it provides convenience wrappers for the most commonly used features like http requests. It also includes a fully compliant (based on the autobahn-ws test) Websocket client with support for permessage compression.

Source code

io_uring Wrapper

asyncpp-uring is a c++ wrapper around the linux specific io_uring library. It allows for super fast I/O without sacrificing readability of the code. It is designed as a low-level building block for performance critical applications that can afford being tied to a single operating system.

Source code

gRPC Wrapper

asyncpp-grpc is a helper library for gRPC. It wraps the asynchronous completion queue api and provides easy to use client interfaces to easily consume a remote service from coroutine code without blocking the thread. It also provides a server side task type to allow easily building fully asynchronous server methods.

Source code