Как уже упоминалось, вам нужно удалить await
. Однако , что превращает его в задачу fire-and-Forgot , которая, если приведенный выше код окажется, скажем, в консольном приложении Main
, тогда ваш процесс может завершиться до выполнения задачизавершено.
Хорошо:
// C# 7
static async void Main(string[] args) // <--- note `async` signature
{
await Task.Run(() => { Thread.Sleep(5000); Console.WriteLine("I'm running
after Thread.Sleep"); });
Console.WriteLine("I'm running after Task.Run");
}
Плохо: - задание "забей и забудь", которое не await
ed
static void Main(string[] args)
{
Task.Run(() => { Thread.Sleep(5000); Console.WriteLine("Spider Man: I don't wan't to go!"); }); // POOF!!
Console.WriteLine("I'm running after Task.Run");
// sorry Spidy, you're dead
}
Так что вы можете вообще не видеть I'm running after Thread.Sleep
, даже если у вас есть Thread.Sleep()
.(кстати, вы должны использовать Task.Delay()
).Вы могли бы смягчить его с помощью Console.ReadKey()
, но это могло бы нанести ущерб цели.
Задачи "забей и забудь" имеют свое применение и могут использоваться достаточно безопасно в других типах длительных приложения, такие как WinForms, но люди обычно не запускают Задачи в точке входа в процесс, поэтому задачи обычно выполняются до завершения без какого-либо досрочного завершения процесса.Тем не менее, как правило, рекомендуется использовать await
там, где вы можете, чтобы не выстрелить себе в ногу.
Кроме того, ваши требования к желанию вещей в определенном порядке демонстрируют неправильное понимание того, какasync/await
работает.