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.
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.
Documentationasyncpp-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 codeasyncpp-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 codeasyncpp-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