C# 收益率与平行ForEach
下面是代码的测试示例 [……]C# 收益率与平行ForEach,c#,C#,下面是代码的测试示例 [……] public IEnumerable GetList(一个对象) { Parallel.ForEach(obj.yTest.Keys,key=> { 开关(钥匙) { 案例“1”: 返回新的B(){Name=obj.yTest[key]}; 打破 案例“2”: 返回新的B(){Name=obj.yTest[key]}; 打破 案例“3”: 返回新的B(){Name=obj.yTest[key]}; 打破 案例“4”: 返回新的B(){Name=obj.yTest[
public IEnumerable GetList(一个对象)
{
Parallel.ForEach(obj.yTest.Keys,key=>
{
开关(钥匙)
{
案例“1”:
返回新的B(){Name=obj.yTest[key]};
打破
案例“2”:
返回新的B(){Name=obj.yTest[key]};
打破
案例“3”:
返回新的B(){Name=obj.yTest[key]};
打破
案例“4”:
返回新的B(){Name=obj.yTest[key]};
打破
}
});
}
}
B类
{
公共字符串名称{get;set;}
}
错误:
“只有方法、运算符和访问器才能包含“yield”语句”您不能在这样的lambda中使用
yield
。但是,您可以用select语句替换Parallel.ForEach
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;
}
});
}
public IEnumerable GetList(一个对象)
{
返回obj.yTest.Keys.aspallel().Select(key=>
{
开关(钥匙)
{
案例“1”:
返回新的B(){Name=obj.yTest[key]};
打破
案例“2”:
返回新的B(){Name=obj.yTest[key]};
打破
案例“3”:
返回新的B(){Name=obj.yTest[key]};
打破
案例“4”:
返回新的B(){Name=obj.yTest[key]};
打破
违约:
返回新的B(){Name=obj.yTest[key]};
打破
}
});
}
这将给你一个并行选择,一个
IEnumerable
,以及你从yield return
得到的延迟执行。检查这个:这个:你希望完成什么?
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;
}
});
}