Track progress after each completed step.

async Async operations often report progress between awaits so the caller can update the user interface.

Progress Updates

steps
ProgressUpdates.cs
Replay: real traced execution (multi-file project)
using System;

class Program
{
    static void Main()
    {
        int steps = 3;
        int percent = 0;

        for (int current = 1; current <= steps; current++)
        {
            percent = current * 100 / steps;
            Console.WriteLine($"step={current}, percent={percent}");
        }

        Console.WriteLine($"final={percent}");
    }
}
using System;

class Program
{
    static void Main()
    {
        int steps = 1;
        int percent = 0;

        for (int current = 1; current <= steps; current++)
        {
            percent = current * 100 / steps;
            Console.WriteLine($"step={current}, percent={percent}");
        }

        Console.WriteLine($"final={percent}");
    }
}
using System;

class Program
{
    static void Main()
    {
        int steps = 5;
        int percent = 0;

        for (int current = 1; current <= steps; current++)
        {
            percent = current * 100 / steps;
            Console.WriteLine($"step={current}, percent={percent}");
        }

        Console.WriteLine($"final={percent}");
    }
}
  1. steps ← 3, percent ← 0

    4{5    static void Main()6    {7        int steps→ 3 = 3; //@steps=1, 58        int percent→ 0 = 0;
  2. percent ← 33

    pass 1 of 3
    10for (int current1 = 1; current <= steps3; current++)11{12    percent→ 33 = current1 * 100 / steps3;13    Console.WriteLine($"step={current1}, percent={percent33}");14}
    outputstep=1, percent=33
    All 3 passes — pass 1 is the card above
    passcurrentpercent
    1133
    2266
    33100
  3. Console.WriteLine($"final={percent}");

    16    Console.WriteLine($"final={percent100}");17}
    outputfinal=100
  1. steps ← 1, percent ← 0

    4{5    static void Main()6    {7        int steps→ 1 = 1;8        int percent→ 0 = 0;
  2. percent ← 100

    10for (int current1 = 1; current <= steps1; current++)11{12    percent→ 100 = current1 * 100 / steps1;13    Console.WriteLine($"step={current1}, percent={percent100}");14}
    outputstep=1, percent=100
  3. Console.WriteLine($"final={percent}");

    16    Console.WriteLine($"final={percent100}");17}
    outputfinal=100
  1. steps ← 5, percent ← 0

    4{5    static void Main()6    {7        int steps→ 5 = 5;8        int percent→ 0 = 0;
  2. percent ← 20

    pass 1 of 5
    10for (int current1 = 1; current <= steps5; current++)11{12    percent→ 20 = current1 * 100 / steps5;13    Console.WriteLine($"step={current1}, percent={percent20}");14}
    outputstep=1, percent=20
    All 5 passes — pass 1 is the card above
    passcurrentpercent
    1120
    2240
    3360
    4480
    55100
  3. Console.WriteLine($"final={percent}");

    16    Console.WriteLine($"final={percent100}");17}
    outputfinal=100