Вы запускаете задачи и просто забываете их, пока поток продолжает работать.Это исправляет это.
Main:
static async Task Main(string[] args)
{
var fooWorker = new FooWorker();
var barWorker = new BarWorker();
var test = new Class1(fooWorker, barWorker);
await test.SomeWork();
Console.ReadLine();
}
SomeWork:
public async Task SomeWork()
{
_foos = ProduceManyFoo();
await MoreWork();
Console.WriteLine("FINISHED !");
}
More Изменение подписиWork:
private async Task MoreWork()
Очевидный запах кода, которыйдолжно помочь разобраться в проблеме с использованием async void
.Если этого не требуется, этого всегда следует избегать.
При использовании async
и await
вы обычно захотите связать вызовы await
с верхним уровнем (в данном случае Main
).
await
не является блокирующим, поэтому все, что вызывает метод async
, должно действительно заботиться о возвращении Task
.