方法永远不会因为yield break语句而执行,如何从中恢复?

时间:2017-12-09 08:07:08

标签: c#

我必须从特定文件夹中读取多个xml文件并存储在列表中,但每当我使用yield break; keyword时,都不会调用该方法。我完全被困在这里。

以下是我的代码:

private IEnumerable<SyncEntity> GetUpdatedItemsOfTypePagination(string folderPath)
{
    int currentPage = 1;
    string finishFilePath = Path.Combine(folderPath, "GetUpdateItemsOfType_Finish.xml");
    while (true)
    {
        string xmlFileFullPath = Path.Combine(folderPath, $"GetUpdateItemsOfType{currentPage}.xml");
        bool pageReadCompleted = false;
        for (int i = 0; i < 1000; i++) //wait max time of 1,000*0.1 = 100 seconds
        {
            if (!File.Exists(xmlFileFullPath))
            {
                if (File.Exists(finishFilePath))
                {
                    yield break;
                }
                Thread.Sleep(TimeSpan.FromSeconds(0.1));
                continue;
            }

            List<SyncEntity> pageItems = GetUpdatedItemsPage(xmlFileFullPath);
            pageReadCompleted = true;
            foreach (var syncEntity in pageItems)
            {
                yield return syncEntity;
            }
            break;
        }

        if (!pageReadCompleted)
        {
            throw new ApplicationException("Timeout reached for GetUpdatedItems method...");
        }

        currentPage++;
    }
}

0 个答案:

没有答案