Async Swimlane Diagram - ZjzMisaka/PowerThreadPool GitHub Wiki

@startuml
skinparam swimlaneWidth same
skinparam ActivityBackgroundColor #FEFEFE
skinparam ActivityBorderColor #333333

|User Layer|
start
:Submit Async Task;

|#E1F5FE|PTP Layer|
:Custom SynchronizationContext;
:Unified Execution Engine;
note left
  * Native Async
  * Sync/Async Interleaving
end note

|User Layer|
:Execute User Task;

fork
    :Await User Code;
    |PTP Layer|
    :Capture Continuation;
    :Manage via PTP;
    note left
      * Apply PTP Features
      (Pause, Stop, etc.)
    end note
    |User Layer|
    :Resume Task;
fork again
    :Call 3rd Party API;
    |#F5F5F5|3rd Party Library Layer|
    :Internal Async Logic;
    :Await Internal Code
    (Assuming ConfigureAwait(false))
    ====
    <b>[PTP: Does not manage its continuations]</b>
    <b>[3rd: Does not rely on PTP-specific features]</b>;
    :Default ThreadPool;
    :Resume Internal Logic;
    |User Layer|
    :Return Result;
end fork

|User Layer|
:Task Completed;
stop
@enduml