首页 新闻 会员 周边

请教 task.delay

0
悬赏园豆:5 [已解决问题] 解决于 2022-06-25 10:41

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是不变化的

请问各位大侠,这个是什么机制呢?谢谢

rossi努力努力的主页 rossi努力努力 | 初学一级 | 园豆:8
提问于:2022-06-15 14:39
< >
分享
最佳答案
1

await Task.Delay(100);:释放当前线程等待100ms,100ms后重新从线程池中取1个线程继续执行

收获园豆:5
dudu | 高人七级 |园豆:30829 | 2022-06-15 14:44

感谢大神

rossi努力努力 | 园豆:8 (初学一级) | 2022-06-25 10:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册