我正在使用Parallel.ForEach
循环LINQ to SQL映射。一旦处理了一定数量的元素,我就会跳出循环。处理停止,但随后的循环挂起几秒钟之前,我得到一个错误:通过LINQ查询打破Parallel.ForEach
System.Data.SqlClient.SqlErrorCollection: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
我怎么循环正常退出?通过将ToList()
附加到查询来强制本地集合是没有选择的。我也尝试将所有内容都包装在using
块中无济于事。需要注意的是,
下面是代码:
var query = SomeDataContext.SomeTableMapping; // All ok, if I append Take(maxRecords)
int maxRecords = 1000;
Parallel.ForEach(query, (queryResult, pLoopState, idx) =>
{
// Do whatever here on queryResult.
if (idx > maxRecords)
{
Console.WriteLine("Reached maximum number of records: {0}", maxRecords);
pLoopState.Break();
}
});
感谢,
/大卫
调用中断,不会停止执行小于当前正在运行的迭代索引的迭代。假如在索引号20上调用Break,那么直到1-19的所有迭代都完成后,循环才会停止。是的,我同意检查“ShouldExitCurrentIteration”肯定有助于提高响应速度。如果您想在遇到某些情况时立即分手,则Stop()是您最好的选择。 –
同意。感谢Pawan! –
探测'pLoopState.ShouldExitCurrentIteration'没有帮助,错误仍然存在。请注意,我编辑了我的原始帖子。我实际上遍历映射本身,即使错误是相同的: - / –