В 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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