В C# async/await влияет ли длина задержки на возврат управления вызывающему абоненту?C#

Место общения программистов C#
Anonymous
В C# async/await влияет ли длина задержки на возврат управления вызывающему абоненту?

Сообщение Anonymous »

Следующий код работает должным образом — обе службы запускаются одновременно.

Код: Выделить всё

List services = [ new Service(), new Service() ];

foreach (Service service in services)
{
Task task = service.StartAsync();
}

Console.ReadLine();

class Service
{
public async Task StartAsync()
{
await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("HH:mm:ss")}\tStarted");

await Task.Delay(TimeSpan.FromSeconds(1));

//Simulate some synchronous work.
Thread.Sleep(10_000);

await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("HH:mm:ss")}\tFinished");
}
}
Вывод:

Код: Выделить всё

20:32:25     Started
20:32:25     Started
20:32:35     Finished
20:32:35     Finished
Но когда вы меняете задержку с TimeSpan.FromSeconds(1) на TimeSpan.FromMicro Seconds(1), результат будет такой:

Код: Выделить всё

20:40:10     Started
20:40:20     Finished
20:40:20     Started
20:40:30     Finished
Почему изменение задержки влияет на поведение? Происходит ли состояние гонки?

Подробнее здесь: https://stackoverflow.com/questions/784 ... to-the-cal

Вернуться в «C#»