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?