Asynchronous programming in C++ is a challenging task. Various async models and corresponding libraries facilitate these tasks, and it seems that it's becoming easier. With C++20 coroutines, we have new possibilities, but standard library support for coroutines is virtually nonexistent. Also, having only C++ coroutines in a toolbox is like having only raw pointers or std::thread, i.e., low-level primitives, which cannot be enough for highly composable and scalable APIs. There are a lot of libraries for async tasks implemented on top of coroutines, but there's still an open question - which one to use?
Aside from coroutines, Senders/Receivers emerged as a promising model for async computations, and std::execution (P2300) is voted in for C++26.
In this talk, we'll go through Sender/Receiver concepts, various examples from stdexec, and NVIDIA's implementation of std::execution proposal, and we'll shed some light on how Sender/Receiver model interacts with C++ coroutines.