Yield return and Parallel ForEach
本文关键字:ForEach Parallel and return Yield | 更新日期: 2023-09-27 18:13:00
下面是代码的测试样例[…]
public IEnumerable<B> GetList(A obj)
{
Parallel.ForEach(obj.yTest.Keys, key =>
{
switch (key)
{
case "1":
yield return new B() {Name = obj.yTest[key]};
break;
case "2":
yield return new B() {Name = obj.yTest[key]};
break;
case "3":
yield return new B() {Name = obj.yTest[key]};
break;
case "4":
yield return new B() {Name = obj.yTest[key]};
break;
}
});
}
}
class B
{
public string Name { get; set; }
}
错误:"只有方法、操作符和访问器可以包含'yield'语句"
你不能在lambda中这样使用yield
。但是,您可以做的是将Parallel.ForEach
替换为PLINQ选择语句。
public IEnumerable<B> GetList(A obj)
{
return obj.yTest.Keys.AsParallel().Select(key =>
{
switch (key)
{
case "1":
return new B() {Name = obj.yTest[key]};
break;
case "2":
return new B() {Name = obj.yTest[key]};
break;
case "3":
return new B() {Name = obj.yTest[key]};
break;
case "4":
return new B() {Name = obj.yTest[key]};
break;
default:
return new B() {Name = obj.yTest[key]};
break;
}
});
}
,这将为您提供并行选择到IEnumerable
以及您将从yield return
获得的延迟执行。