暂停循环直到内部函数返回(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)。显然,现在的写法几乎是同时发生的。

我怎样才能更好地处理这个问题?

暂停循环直到内部函数返回(c#)

您需要进行某种线程同步。

不清楚你从哪里得到的LoadAmazonByBatch(),但我建议

  • 检查文档中该函数是否有同步版本。

  • 如果没有可用的文档,那么您需要卷起袖子。它可能需要查看或修改LoadAmazonByBatch()的源。查找由工人完成时设置的ManualResetEvent。或者,当该方法完成时,可能会触发一个常规的。net事件。如果这些东西不存在,你需要添加类似的东西。

LoadAmazonDataByBatch很可能会创建一堆线程。您必须在所有创建的线程上调用Join,直到它们完成。

这个不会等待函数返回的唯一方法是如果它是异步编写的?

相关代码不是你发布的循环,而是我们需要看到的LoadAmazonDataByBatch()的定义

如果该函数有回调(stopWatch?),也许您可以在回调中调用函数(LoadAmazonDataByBatch)

如果LoadAmazonDataByBatch()生成子线程,并且它运行直到每个线程都完成,您可以使用Thread.Join()方法使它等待子线程完成。我不确定这将如何为多个孩子工作,但我认为它应该是好的。

参考:c#中的线程