我有一个循环,在LoadAmazonDataByBatch()
返回之前我不想继续。我知道必须有一种直截了当的做法,我几乎可以肯定我正在接近这个问题。
const int batchSize = 500;
for (int i = 0; i < total; i = i + batchSize)
{
LoadAmazonDataByBatch(i, batchSize, fileList, total, amazonLogHandler, stopWatch);
}
LoadAmazonDataByBatch()
在工作线程上做了很多事情,包括创建一个临时的DataSet,它会在没有批处理的情况下变得非常大。在处理和处理旧数据集之前,我不想创建新的DataSet(通过LoadAmazonDataByBatch)。
显然,现在写的方式几乎都是一次性的。
我怎样才能更好地接近这个?
答案 0 :(得分:2)
您需要进行某种线程同步。
不清楚LoadAmazonByBatch()
的位置,但我建议
检查该函数的doc以查看是否存在该操作的同步版本。
如果没有可用的文档,那么你需要卷起袖子。可能需要查看或修改LoadAmazonByBatch()
的来源。查找工作人员完成时设置的ManualResetEvent
。或者,也许在该方法完成时会发生一个常规的.NET事件。如果那些东西不存在,你需要添加类似的东西。
答案 1 :(得分:0)
LoadAmazonDataByBatch很可能会创建一堆线程。你必须在所有创建的线程上调用Join来等待它们完成。
答案 2 :(得分:0)
这个不会等待函数返回的唯一方法是它是否异步写入?
相关代码不是您发布的循环,而是我们需要查看的LoadAmazonDataByBatch()
定义。
答案 3 :(得分:0)
如果该函数有回调(stopWatch?),也许你可以在回调中调用函数(LoadAmazonDataByBatch)。
答案 4 :(得分:0)
如果LoadAmazonDataByBatch()
生成子线程,并且它运行直到每个线程都完成,您可以使用Thread.Join()
方法使其等待子线程完成。我不确定这对多个孩子有什么用,但我认为应该没问题。