我有一个DbContext(Entity Framework 6.0)和1,000个对象。
对于每个对象,我开始将其保存到数据库中或使用相同的DbContext使用单独的线程/任务更新其数据。
这就是我得到的:
据我所知,由于使用相同的DbContext对象和多次调用,所以我得到了线程的异常。但我不确定。
问题:为什么我在这里通过线程获得差异和异常?
我对任务和TPL库了解不多。我之前使用Thread进行过几个小规模的项目。
答案 0 :(得分:1)
Task.Factory.StartNew :启动将在线程池线程中运行的新任务,或者可以在同一线程中运行。如果它在线程池线程中运行,则完成后线程将返回到池中。线程创建/销毁是一个昂贵的过程。
新主题()。开始():将始终在新主题中运行,因此,它更贵。
该异常意味着正在从其他地方获取正在进行的数据集,并且您正在尝试同时打开另一个数据读取器。使用任务时,也许你正在执行另一个任务,这就是你没有得到异常的原因。
异常与线程无关。您可以通过打开数据阅读器获得相同的异常,并尝试在不关闭第一个数据的情况下打开一个新的。
我建议您仔细检查您的代码,并确保在使用之前需要进行线程处理。多线程过度使用会产生性能问题和令人难以置信的丑陋漏洞。