1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_async2: 2*61c4878aSAndroid Build Coastguard Worker 3*61c4878aSAndroid Build Coastguard Worker========= 4*61c4878aSAndroid Build Coastguard Workerpw_async2 5*61c4878aSAndroid Build Coastguard Worker========= 6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module:: 7*61c4878aSAndroid Build Coastguard Worker :name: pw_async2 8*61c4878aSAndroid Build Coastguard Worker 9*61c4878aSAndroid Build Coastguard Worker - **Simple Ownership**: Say goodbye to that jumble of callbacks and shared 10*61c4878aSAndroid Build Coastguard Worker state! Complex tasks with many concurrent elements can be expressed by 11*61c4878aSAndroid Build Coastguard Worker simply combining smaller tasks. 12*61c4878aSAndroid Build Coastguard Worker - **Efficient**: No dynamic memory allocation required. 13*61c4878aSAndroid Build Coastguard Worker - **Pluggable**: Your existing event loop, work queue, or task scheduler 14*61c4878aSAndroid Build Coastguard Worker can run the ``Dispatcher`` without any extra threads. 15*61c4878aSAndroid Build Coastguard Worker - **Coroutine-capable**: C++20 coroutines work just like other tasks, and can 16*61c4878aSAndroid Build Coastguard Worker easily plug into an existing ``pw_async2`` system. 17*61c4878aSAndroid Build Coastguard Worker 18*61c4878aSAndroid Build Coastguard Worker:cpp:class:`pw::async2::Task` is Pigweed's async primitive. ``Task`` objects 19*61c4878aSAndroid Build Coastguard Workerare cooperatively-scheduled "threads" which yield to the 20*61c4878aSAndroid Build Coastguard Worker:cpp:class:`pw::async2::Dispatcher` when waiting. When the ``Task`` is able to make 21*61c4878aSAndroid Build Coastguard Workerprogress, the ``Dispatcher`` will run it again. For example: 22*61c4878aSAndroid Build Coastguard Worker 23*61c4878aSAndroid Build Coastguard Worker.. tab-set:: 24*61c4878aSAndroid Build Coastguard Worker 25*61c4878aSAndroid Build Coastguard Worker .. tab-item:: Manual state machine 26*61c4878aSAndroid Build Coastguard Worker 27*61c4878aSAndroid Build Coastguard Worker .. literalinclude:: examples/basic.cc 28*61c4878aSAndroid Build Coastguard Worker :language: cpp 29*61c4878aSAndroid Build Coastguard Worker :linenos: 30*61c4878aSAndroid Build Coastguard Worker :start-after: [pw_async2-examples-basic-manual] 31*61c4878aSAndroid Build Coastguard Worker :end-before: [pw_async2-examples-basic-manual] 32*61c4878aSAndroid Build Coastguard Worker 33*61c4878aSAndroid Build Coastguard Worker .. tab-item:: Coroutine 34*61c4878aSAndroid Build Coastguard Worker 35*61c4878aSAndroid Build Coastguard Worker .. literalinclude:: examples/basic.cc 36*61c4878aSAndroid Build Coastguard Worker :language: cpp 37*61c4878aSAndroid Build Coastguard Worker :linenos: 38*61c4878aSAndroid Build Coastguard Worker :start-after: [pw_async2-examples-basic-coro] 39*61c4878aSAndroid Build Coastguard Worker :end-before: [pw_async2-examples-basic-coro] 40*61c4878aSAndroid Build Coastguard Worker 41*61c4878aSAndroid Build Coastguard WorkerTasks can then be run on a :cpp:class:`pw::async2::Dispatcher` using the 42*61c4878aSAndroid Build Coastguard Worker:cpp:func:`pw::async2::Dispatcher::Post` method: 43*61c4878aSAndroid Build Coastguard Worker 44*61c4878aSAndroid Build Coastguard Worker.. literalinclude:: examples/basic.cc 45*61c4878aSAndroid Build Coastguard Worker :language: cpp 46*61c4878aSAndroid Build Coastguard Worker :linenos: 47*61c4878aSAndroid Build Coastguard Worker :start-after: [pw_async2-examples-basic-dispatcher] 48*61c4878aSAndroid Build Coastguard Worker :end-before: [pw_async2-examples-basic-dispatcher] 49*61c4878aSAndroid Build Coastguard Worker 50*61c4878aSAndroid Build Coastguard Worker.. grid:: 2 51*61c4878aSAndroid Build Coastguard Worker 52*61c4878aSAndroid Build Coastguard Worker .. grid-item-card:: :octicon:`rocket` Quickstart & guides 53*61c4878aSAndroid Build Coastguard Worker :link: module-pw_async2-quickstart-guides 54*61c4878aSAndroid Build Coastguard Worker :link-type: ref 55*61c4878aSAndroid Build Coastguard Worker :class-item: sales-pitch-cta-primary 56*61c4878aSAndroid Build Coastguard Worker 57*61c4878aSAndroid Build Coastguard Worker How to: 58*61c4878aSAndroid Build Coastguard Worker 59*61c4878aSAndroid Build Coastguard Worker * Use dispatchers to coordinate tasks 60*61c4878aSAndroid Build Coastguard Worker * Pass data between tasks 61*61c4878aSAndroid Build Coastguard Worker * Use coroutines 62*61c4878aSAndroid Build Coastguard Worker 63*61c4878aSAndroid Build Coastguard Worker And more. 64*61c4878aSAndroid Build Coastguard Worker 65*61c4878aSAndroid Build Coastguard Worker .. grid-item-card:: :octicon:`code-square` Reference 66*61c4878aSAndroid Build Coastguard Worker :link: module-pw_async2-reference 67*61c4878aSAndroid Build Coastguard Worker :link-type: ref 68*61c4878aSAndroid Build Coastguard Worker :class-item: sales-pitch-cta-secondary 69*61c4878aSAndroid Build Coastguard Worker 70*61c4878aSAndroid Build Coastguard Worker API reference for: 71*61c4878aSAndroid Build Coastguard Worker 72*61c4878aSAndroid Build Coastguard Worker * ``Task`` 73*61c4878aSAndroid Build Coastguard Worker * ``Dispatcher`` 74*61c4878aSAndroid Build Coastguard Worker * ``CoRo`` 75*61c4878aSAndroid Build Coastguard Worker 76*61c4878aSAndroid Build Coastguard Worker And more. 77*61c4878aSAndroid Build Coastguard Worker 78*61c4878aSAndroid Build Coastguard Worker.. grid:: 2 79*61c4878aSAndroid Build Coastguard Worker 80*61c4878aSAndroid Build Coastguard Worker .. grid-item-card:: :octicon:`code-square` Backends 81*61c4878aSAndroid Build Coastguard Worker :link: module-pw_async2-backends 82*61c4878aSAndroid Build Coastguard Worker :link-type: ref 83*61c4878aSAndroid Build Coastguard Worker :class-item: sales-pitch-cta-secondary 84*61c4878aSAndroid Build Coastguard Worker 85*61c4878aSAndroid Build Coastguard Worker You can fulfill the ``pw_async2`` interface with a Pigweed-provided 86*61c4878aSAndroid Build Coastguard Worker backend or roll your own. 87*61c4878aSAndroid Build Coastguard Worker 88*61c4878aSAndroid Build Coastguard Worker .. grid-item-card:: :octicon:`pencil` Pigweed blog: C++20 coroutines 89*61c4878aSAndroid Build Coastguard Worker :link: docs-blog-05-coroutines 90*61c4878aSAndroid Build Coastguard Worker :link-type: ref 91*61c4878aSAndroid Build Coastguard Worker :class-item: sales-pitch-cta-secondary 92*61c4878aSAndroid Build Coastguard Worker 93*61c4878aSAndroid Build Coastguard Worker A blog post on how Pigweed implements coroutines without heap 94*61c4878aSAndroid Build Coastguard Worker allocation, and challenges encountered along the way. 95*61c4878aSAndroid Build Coastguard Worker 96*61c4878aSAndroid Build Coastguard Worker.. toctree:: 97*61c4878aSAndroid Build Coastguard Worker :hidden: 98*61c4878aSAndroid Build Coastguard Worker :maxdepth: 1 99*61c4878aSAndroid Build Coastguard Worker 100*61c4878aSAndroid Build Coastguard Worker guides 101*61c4878aSAndroid Build Coastguard Worker reference 102*61c4878aSAndroid Build Coastguard Worker Backends <backends> 103