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

Task Status Model

TaskStatusModel.cs
using System;

class Program
{
    static void Main()
    {
        string status = ;
        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 = ;
        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 = ;
        bool canAwait = status == "waiting" || status == "running";
        bool isDone = status == "completed";

        Console.WriteLine($"status={status}");
        Console.WriteLine($"canAwait={canAwait}");
        Console.WriteLine($"isDone={isDone}");
    }
}
async Async work has states. A program often branches based on whether work is still running or already complete.