I have this construct in my main(), which creates
var tasks = new List();
var t = Task.Factory.StartNew(
async () =>
{
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 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