Model the status values a task-like operation can report.

async Async work has states. A program often branches based on whether work is still running or already complete.

Task Status Model

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

class Program
{
    static void Main()
    {
        string status = "waiting";
        bool canAwait = status == "waiting" || status == "running";
        bool isDone = status == "completed";

        Console.WriteLine($"status={status}");
        Console.WriteLine($"canAwait={canAwait}");
        Console.WriteLine($"isDone={isDone}");
    }
}
using System;

class Program
{
    static void Main()
    {
        string status = "running";
        bool canAwait = status == "waiting" || status == "running";
        bool isDone = status == "completed";

        Console.WriteLine($"status={status}");
        Console.WriteLine($"canAwait={canAwait}");
        Console.WriteLine($"isDone={isDone}");
    }
}
using System;

class Program
{
    static void Main()
    {
        string status = "completed";
        bool canAwait = status == "waiting" || status == "running";
        bool isDone = status == "completed";

        Console.WriteLine($"status={status}");
        Console.WriteLine($"canAwait={canAwait}");
        Console.WriteLine($"isDone={isDone}");
    }
}
  1. status ← waiting, canAwait ← True, isDone ← False

    4{5    static void Main()6    {7        string status→ waiting = "waiting"; //@status="running", "completed"8        bool canAwait→ True = statuswaiting == "waiting" || status == "running";9        bool isDone→ False = statuswaiting == "completed";1011        Console.WriteLine($"status={statuswaiting}");12        Console.WriteLine($"canAwait={canAwaitTrue}");13        Console.WriteLine($"isDone={isDoneFalse}");14    }
    outputstatus=waiting
    canAwait=True
    isDone=False
  1. status ← running, canAwait ← True, isDone ← False

    4{5    static void Main()6    {7        string status→ running = "running";8        bool canAwait→ True = statusrunning == "waiting" || status == "running";9        bool isDone→ False = statusrunning == "completed";1011        Console.WriteLine($"status={statusrunning}");12        Console.WriteLine($"canAwait={canAwaitTrue}");13        Console.WriteLine($"isDone={isDoneFalse}");14    }
    outputstatus=running
    canAwait=True
    isDone=False
  1. status ← completed, canAwait ← False, isDone ← True

    4{5    static void Main()6    {7        string status→ completed = "completed";8        bool canAwait→ False = statuscompleted == "waiting" || status == "running";9        bool isDone→ True = statuscompleted == "completed";1011        Console.WriteLine($"status={statuscompleted}");12        Console.WriteLine($"canAwait={canAwaitFalse}");13        Console.WriteLine($"isDone={isDoneTrue}");14    }
    outputstatus=completed
    canAwait=False
    isDone=True