我想调用一个方法并行。在这个方法中,我计算一些值(非常快)并将此计算的值写入数据库表。
因此我使用Threadpool
ThreadPool.QueueUserWorkItem((state) => {
method();
});
经过一段时间的计算(不确定,发生这种情况的时间有所不同,有时是几分钟后,有时是几个小时后),Threadpool已经满了,但是没有使用method()的线程,而是使用我的线程调用MySqlCommand.ExecuteNonQuery
的mysql类。
有没有人知道如何避免这种情况?在mysql类的文档中,我发现你无法终止正在执行的查询但是如何避免这些问题呢?
答案 0 :(得分:5)
您是否需要在计算完所有值后将所有值写入数据库,或者您可以等到有一些值,并在插入大量数据时进行批量更新?
如果所有线程都试图同时写入同一个表,那么您可能会遇到锁定问题。因此,尝试在本地存储数字,然后在一个大批量中提交它们