Task.Delay实质是创建一个任务,再任务中开启一个定时间,然后延时指定的时间
查看F1的解释是
// 摘要:
// Creates a task that completes after a specified number of milliseconds.
我使用
Task.Run(async () =>
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " Task.Factory.StartNew start" + " " + Thread.CurrentThread.ManagedThreadId);
for (int i = 101; i < 120; i++)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " =Delay前= " + i + " " + Thread.CurrentThread.ManagedThreadId);
await Task.Delay(100);//需要.net4.5及以上
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " =Delay后= " + i + " " + Thread.CurrentThread.ManagedThreadId);
}
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " Task.Factory.StartNew end" + " " + Thread.CurrentThread.ManagedThreadId);
});
发现执行 await task.delay后,thread.currentThread.ManagedThreadId会变化!,而且是偶尔变化,
而我取消 await 和async后,显示ID是不变化的
请问各位大侠,这个是什么机制呢?谢谢
await Task.Delay(100);
:释放当前线程等待100ms,100ms后重新从线程池中取1个线程继续执行
感谢大神