Task.delay завершается раньшеC#

Место общения программистов C#
Ответить
Anonymous
 Task.delay завершается раньше

Сообщение Anonymous »

Я наблюдал в .net Framework и .NET Core, что задание. delay () , по -видимому, завершает ранее , чем следовало бы. Обычно несовершеннолетний составляет 10s µ, но в редком случае это может быть до нескольких мс. Рассмотрим эту программу: < /p>
class Program
{
static void Main(string[] args)
{
Console.WriteLine("TaskDelayTest .NET Framework");
while (true)
{
DateTime now = DateTime.UtcNow;
TimeSpan wait = TimeSpan.FromMilliseconds(1000);
DateTime then = now + wait;
Task delay = Task.Delay(wait);
delay.ContinueWith(Execute, then);
Thread.Sleep(100);
}
}

static void Execute(Task delay, object arg)
{
DateTime later = DateTime.UtcNow;
DateTime then = (DateTime)arg;
if (later < then)
{
Console.WriteLine("Early execute!!!! {0:n0} ns", (then.Ticks - later.Ticks) * 100);
}
}
}

Я ожидаю, что строка «Раннее выполнение» никогда не будет напечатана, потому что задача. Delay должна ждать , по крайней мере, так долго , как параметр задержки. Однако это не то, что я наблюдаю. Если вы позволите программе работать достаточно долго, в конечном итоге она выводит «Раннее выполнение». Я неверно истолковал спецификацию здесь?TaskDelayTest .NET Core
Early execute!!!! 199,800 ns
Early execute!!!! 22,200 ns
Early execute!!!! 353,300 ns
Early execute!!!! 571,200 ns
Early execute!!!! 90,700 ns
Early execute!!!! 85,600 ns
Early execute!!!! 9,300 ns
Early execute!!!! 540,600 ns
Early execute!!!! 141,200 ns
Early execute!!!! 107,800 ns
Early execute!!!! 397,200 ns
Early execute!!!! 297,000 ns


Подробнее здесь: https://stackoverflow.com/questions/479 ... es-earlier
Ответить

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

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

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

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

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