Async Concepts
Async Pipeline
Move data through named stages of an async-style pipeline.
async
Pipelines keep each stage small: one step prepares data, the next transforms it, and the final step records the result.
Async Pipeline
AsyncPipeline.cs
Replay: real traced execution (multi-file project)
using System;
class Program
{
static string RunStage(string stage, int value)
{
if (stage == "fetch")
{
return $"fetched={value}";
}
if (stage == "transform")
{
return $"transformed={value * 2}";
}
return $"saved={value}";
}
static void Main()
{
string stage = "transform";
int value = 4;
string output = RunStage(stage, value);
Console.WriteLine($"stage={stage}");
Console.WriteLine(output);
}
}
using System;
class Program
{
static string RunStage(string stage, int value)
{
if (stage == "fetch")
{
return $"fetched={value}";
}
if (stage == "transform")
{
return $"transformed={value * 2}";
}
return $"saved={value}";
}
static void Main()
{
string stage = "fetch";
int value = 4;
string output = RunStage(stage, value);
Console.WriteLine($"stage={stage}");
Console.WriteLine(output);
}
}
using System;
class Program
{
static string RunStage(string stage, int value)
{
if (stage == "fetch")
{
return $"fetched={value}";
}
if (stage == "transform")
{
return $"transformed={value * 2}";
}
return $"saved={value}";
}
static void Main()
{
string stage = "save";
int value = 4;
string output = RunStage(stage, value);
Console.WriteLine($"stage={stage}");
Console.WriteLine(output);
}
}
using System;
class Program
{
static string RunStage(string stage, int value)
{
if (stage == "fetch")
{
return $"fetched={value}";
}
if (stage == "transform")
{
return $"transformed={value * 2}";
}
return $"saved={value}";
}
static void Main()
{
string stage = "transform";
int value = 2;
string output = RunStage(stage, value);
Console.WriteLine($"stage={stage}");
Console.WriteLine(output);
}
}
using System;
class Program
{
static string RunStage(string stage, int value)
{
if (stage == "fetch")
{
return $"fetched={value}";
}
if (stage == "transform")
{
return $"transformed={value * 2}";
}
return $"saved={value}";
}
static void Main()
{
string stage = "transform";
int value = 7;
string output = RunStage(stage, value);
Console.WriteLine($"stage={stage}");
Console.WriteLine(output);
}
}
stage ← transform, value ← 4
20static void Main()21{22 string stage→ transform = "transform"; //@stage="fetch", "save"23 int value→ 4 = 4; //@value=2, 724 string output = RunStage(stagetransform, value4);static string RunStage(string stage, int value)
4{5 static string RunStage(string stagetransform, int value4)6 {7 if (stage == "fetch")if (stage == "transform")
12if (stagetransform == "transform")13{14 return $"transformed={value4 * 2}";15}output ← transformed=8
23 int value = 4; //@value=2, 724 string output→ transformed=8 = RunStage(stagetransform, value4);2526 Console.WriteLine($"stage={stagetransform}");27 Console.WriteLine(outputtransformed=8);28}outputstage=transform transformed=8
stage ← fetch, value ← 4
20static void Main()21{22 string stage→ fetch = "fetch";23 int value→ 4 = 4;24 string output = RunStage(stagefetch, value4);static string RunStage(string stage, int value)
4{5 static string RunStage(string stagefetch, int value4)6 {7 if (stage == "fetch")if (stage == "fetch")
6{7 if (stagefetch == "fetch")8 {9 return $"fetched={value4}";10 }output ← fetched=4
23 int value = 4;24 string output→ fetched=4 = RunStage(stagefetch, value4);2526 Console.WriteLine($"stage={stagefetch}");27 Console.WriteLine(outputfetched=4);28}outputstage=fetch fetched=4
stage ← save, value ← 4
20static void Main()21{22 string stage→ save = "save";23 int value→ 4 = 4;24 string output = RunStage(stagesave, value4);static string RunStage(string stage, int value)
4{5 static string RunStage(string stagesave, int value4)6 {7 if (stage == "fetch")8 {9 return $"fetched={value}";10 }1112 if (stage == "transform")13 {14 return $"transformed={value * 2}";15 }1617 return $"saved={value4}";18 }output ← saved=4
23 int value = 4;24 string output→ saved=4 = RunStage(stagesave, value4);2526 Console.WriteLine($"stage={stagesave}");27 Console.WriteLine(outputsaved=4);28}outputstage=save saved=4
stage ← transform, value ← 2
20static void Main()21{22 string stage→ transform = "transform";23 int value→ 2 = 2;24 string output = RunStage(stagetransform, value2);static string RunStage(string stage, int value)
4{5 static string RunStage(string stagetransform, int value2)6 {7 if (stage == "fetch")if (stage == "transform")
12if (stagetransform == "transform")13{14 return $"transformed={value2 * 2}";15}output ← transformed=4
23 int value = 2;24 string output→ transformed=4 = RunStage(stagetransform, value2);2526 Console.WriteLine($"stage={stagetransform}");27 Console.WriteLine(outputtransformed=4);28}outputstage=transform transformed=4
stage ← transform, value ← 7
20static void Main()21{22 string stage→ transform = "transform";23 int value→ 7 = 7;24 string output = RunStage(stagetransform, value7);static string RunStage(string stage, int value)
4{5 static string RunStage(string stagetransform, int value7)6 {7 if (stage == "fetch")if (stage == "transform")
12if (stagetransform == "transform")13{14 return $"transformed={value7 * 2}";15}output ← transformed=14
23 int value = 7;24 string output→ transformed=14 = RunStage(stagetransform, value7);2526 Console.WriteLine($"stage={stagetransform}");27 Console.WriteLine(outputtransformed=14);28}outputstage=transform transformed=14