public static Task WrapInContext(this ConfigureAwait runnable, Func <Task> action)
 {
     return(Task.Factory.StartNew(() =>
     {
         return action();
     }, CancellationToken.None, TaskCreationOptions.None, scheduler)
            .Unwrap());
 }
    public static void Explain(this ConfigureAwait runnable, TextWriter writer)
    {
        writer.WriteLine(@"
- `ConfigureAwait` controls whether context capturing is enabled
- Context capturing as a simplification can be understood as restoring the TaskScheduler that was visible before the `await`
- Context capturing affects the continuation of an asynchronous method

```
await Method().ConfigureAwait(true|false);
await Continuation(); // <-- affected by line above
```
");
    }
    public static void PrintStart(this ConfigureAwait runnable)
    {
        var visible = TaskScheduler.Current == scheduler ? "visible" : "not visible";

        Console.WriteLine($"start context is {visible}");
    }
    public static void PrintAfterDelayConfigureAwait(this ConfigureAwait runnable)
    {
        var visible = TaskScheduler.Current == scheduler ? "visible" : "not visible";

        Console.WriteLine($"  after delay with configure await context is {visible}");
    }