foreach内部的异常“等待”查询完成

时间:2019-11-12 10:50:34

标签: c# entity-framework-core

因此,我有一个 foreach (在另一个任务中运行,但这并不重要),它遍历几百万条记录并对其进行处理。当我想取消任务(使用取消令牌)并引发异常时,看起来该异常在几分钟内无法从前者中“爆发” >(我的想法是,查询运行时可能无法)。

这是示例代码:

        var query = GetNrrSelectQuery(_dbContext);
        try
        {
            StartShift();
            foreach (var item in query.Select(x => new Something(x, _anonymizer)))
            {
                if (token.IsCancellationRequested)
                {
                    _dbContext.Dispose();
                    return;
                    //token.ThrowIfCancellationRequested();
                }
                while (workArea.Jobs.Count > workArea.JobsQueueSize)
                {
                    Thread.Sleep(100);
                }

                workArea.Jobs.Enqueue(new Job
                {
                    ReportToImport = item
                });
            }
        }
        catch (Exception e)
        {
            WorkArea.ImportingState = ProcessState.CRASHED;
        }

由于我使用的是主工人模式,所以整个代码没有有趣的部分。正如您在if (token.IsCancellationRequested)语句中看到的那样,我已经尝试过想尽一切办法,但是它并不是真的想要工作(无论是否设置dbContext,抛出异常或仅返回)。 如果仅通过调用token.ThrowIfCancellationRequested();引发异常,则调试器将在该特定行停止。击中F11(内部调试步骤)后几分钟实际上什么都没有发生,这是因为它脱离了foreach,而try-catch块抓住了它。

有什么建议可以阻止整个查询过程吗?

还是我在寻找完全错误的方向?

0 个答案:

没有答案