【发布时间】:2017-07-02 21:23:09
【问题描述】:
我正在使用这个example 创建分区,并且在我的 VS2015 应用程序中运行良好。我尝试将代码移动到VS2013,使用4.5.2框架,现在这行代码出现错误:
VS2013 12.0.40629.00 更新 5
body: (source, state, local) =>
说
错误 5 委托 'System.Func
,System.Threading.Tasks.ParallelLoopState,long,AnonymousType#1,AnonymousType#1>' 不接受 3 个参数
我发现了这个问题:Whats wrong in this Parallel.For Code?,非常相似。但这似乎并不是同一个问题。
建议的答案在 2013 年没有任何语法错误,但不使用分区,所以我不确定如何使我的代码适应那个。并且建议添加三个参数,我的已经有了三个参数。
这是我的代码的简化版本:
public void NearLinkParallelGeneration(avl_range avl_pending)
{
var parallelOptions = new ParallelOptions
{
MaxDegreeOfParallelism = Environment.ProcessorCount + 2
};
var partitions = Partitioner
.Create(
fromInclusive: avl_pending.begin,
toExclusive: avl_pending.end,
rangeSize: 100
)
.GetDynamicPartitions();
Parallel.ForEach(
source: partitions,
parallelOptions: parallelOptions,
localInit: () =>
{
NpgsqlConnection conn = new NpgsqlConnection(strConnection);
NpgsqlCommand cmd = new NpgsqlCommand();
conn.Open();
return new { Connection = conn, Command = cmd };
},
body: (source, state, local) => -- HERE IS THE ERROR
{
return local;
},
localFinally: local =>
{
local.Connection?.Dispose();
local.Command?.Dispose();
}
);
【问题讨论】:
-
@twoleggedhorse 你知道我已经链接了那个答案吗?而且我的代码已经在使用这三个参数。但是在那个答案中不使用分区,而我的确实如此。所以不确定如何将我的代码转换为那个。此外,我的代码已经在 VS-2015 中运行
-
@twoleggedhorse:您提出的副本甚至不涉及相同的方法。这个问题和答案属于
Parallel.For(),而这个问题和答案属于Parallel.ForEach()。此外,该问题和答案涉及 API 的 CTP(预览版)版本中存在但在最终版本中已删除的方法重载,而此问题涉及绝对确实存在存在的方法重载并且自从 API 发布以来。请删除您的投票结束,因为建议的重复是一个错误的选择。
标签: c# visual-studio-2013 visual-studio-2015 parallel.foreach