linq 的优点之一是可以根据请求延迟处理无限的数据源。我尝试并行化我的查询,发现延迟加载不起作用。例如……
class Program
{
static void Main(string[] args)
{
var source = Generator();
var next = source.AsParallel().Select(i => ExpensiveCall(i));
foreach (var i in next)
{
System.Console.WriteLine(i);
}
}
public static IEnumerable<int> Generator()
{
int i = 0;
while (true)
{
yield return i;
i++;
}
}
public static int ExpensiveCall(int arg)
{
System.Threading.Thread.Sleep(5000);
return arg*arg;
}
}
这个程序没有产生任何结果,大概是因为在每一步,它都在等待对生成器的所有调用都干涸,当然这永远不会。如果我取出“AsParallel”调用,它就可以正常工作。那么,在使用 PLINQ 提高应用程序性能的同时,我该如何实现出色的延迟加载呢?
最佳答案
var next = source.AsParallel()
.WithMergeOptions(ParallelMergeOptions.NotBuffered)
.Select(i => ExpensiveCall(i));
关于c# - 如何使用 PLINQ 进行延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14680308/