我做一个实验,我有一个100000增量的循环,里面有一个执行特定任务的线程(将日志写入DB),我的问题是,当我在一秒钟内完成它时,也许它开始最近插入它们,然后操作系统如何处理它们并将其全部处理或从中跳过? 我尝试与他们一起等待已久的方法。但我想知道如果此代码在服务器上并收到100000个请求,将会发生什么情况。 代码:
for (int i = 0; i < 100000; i++)
{
Task.Run(() => log.WriteToLog(i + "", new Models.CustomerModel.CustomerModel()));
}
我不是在寻找替代方法,我需要了解行为以及此代码在OS中的处理方式(如果有队列,则其中一些将运行,等等。)
PS:我知道这不是一个好方法
答案 0 :(得分:2)
1秒有点快。我怀疑您未正确记录了100000个条目,并且条目正在丢失。
假设该代码是控制台应用程序main()
中唯一的代码,那么由于您没有await
任何任务,因此完全有可能在日志记录完成之前退出流程
更改:
Task.Run(() => log.WriteToLog(i + "",
new Models.CustomerModel.CustomerModel()));
...至:
await Task.Run(() => log.WriteToLog(i + "",
new Models.CustomerModel.CustomerModel()));
此外,正如ckuri在评论中提到的那样,在紧密循环中产生大量任务可能不是一个好主意。考虑批量记录日志或使用IOCP。