Task.delay wird früher abgeschlossenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Task.delay wird früher abgeschlossen

Post by Anonymous »

Ich habe sowohl in .NET Framework als auch in .NET Core beobachtet, dass Task.delay () früher zu vervollständigen scheint, als es sollte. Normalerweise ist der Usecs der Minderjährige 10, aber bei seltenen Fällen kann es so viel MSCs betragen. Betrachten Sie dieses Programm: < /p>

Code: Select all

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);
}
}
}
Ich würde erwarten, dass die Zeile "Early Execute" niemals gedruckt wird, weil Task.delay mindestens so lange wie der Verzögerungsparameter warten sollte. Dies ist jedoch nicht das, was ich beobachte. Wenn Sie zulassen, dass das Programm lange genug ausgeführt wird, druckt es "Early Execute" aus. Habe ich die Spezifikation hier falsch interpretiert?

Code: Select all

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post