暂停循环直到内部函数返回(c#)
本文关键字:返回 内部函数 循环 暂停 | 更新日期: 2023-09-27 18:10:21
我有一个循环,我不想继续直到LoadAmazonDataByBatch()
返回。我知道一定有一种直接的方法来做这件事,而且我几乎可以肯定,我处理这个问题的方法是错误的。
const int batchSize = 500;
for (int i = 0; i < total; i = i + batchSize)
{
LoadAmazonDataByBatch(i, batchSize, fileList, total, amazonLogHandler, stopWatch);
}
LoadAmazonDataByBatch()
在工作线程上做了很多事情,包括创建一个临时数据集,如果没有批处理,它会变得非常大。我不想创建一个新的数据集,直到旧的被处理和处置(由LoadAmazonDataByBatch)。显然,现在的写法几乎是同时发生的。
我怎样才能更好地处理这个问题?
您需要进行某种线程同步。
不清楚你从哪里得到的LoadAmazonByBatch()
,但我建议
-
检查文档中该函数是否有同步版本。
-
如果没有可用的文档,那么您需要卷起袖子。它可能需要查看或修改
LoadAmazonByBatch()
的源。查找由工人完成时设置的ManualResetEvent
。或者,当该方法完成时,可能会触发一个常规的。net事件。如果这些东西不存在,你需要添加类似的东西。
LoadAmazonDataByBatch很可能会创建一堆线程。您必须在所有创建的线程上调用Join,直到它们完成。
这个不会等待函数返回的唯一方法是如果它是异步编写的?
相关代码不是你发布的循环,而是我们需要看到的LoadAmazonDataByBatch()
的定义
如果该函数有回调(stopWatch?),也许您可以在回调中调用函数(LoadAmazonDataByBatch)
如果LoadAmazonDataByBatch()
生成子线程,并且它运行直到每个线程都完成,您可以使用Thread.Join()
方法使它等待子线程完成。我不确定这将如何为多个孩子工作,但我认为它应该是好的。