Waiting for async/await inside a task

.net, async-await, c#, task, task-parallel-library

Solution

It's discouraged to use `Task.Factory.StartNew` with `async-await`, you should be using `Task.Run` instead:

var t = Task.Run(
    async () =>
    {
        Foo.Fim();
        await Foo.DoBar();
    });

The `Task.Factory.StartNew` api was built before the Task-based Asynchronous Pattern (TAP) and `async-await`. It will return `Task<Task>` because you are starting a task with a lambda expression which happens to be async and so returns a task. `Unwrap` will extract the inner task, but `Task.Run` will implicitly do that for you.

For a deeper comparison, there's always a relevant Stephen Toub article: Task.Run vs Task.Factory.StartNew

Problem

I have this construct in my `main()`, which creates ``` var tasks = new List<Task>(); var t = Task.Factory.StartNew( async () => { Foo.Fim(); await Foo.DoBar(); }); //DoBar not completed t.Wait(); //Foo.Fim() done, Foo.DoBar should be but isn't ``` However, when I `.Wait` for t, it won't wait for the call to `DoBar()` to complete. How do I get it to actually wait?

Original source