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 提高应用程序性能的同时获得出色的延迟加载呢?