如何解决使用参数c#并行任务运行
我需要并行执行一些流程,但是主要的问题是,我正在将参数传递给该流程
。
该过程有两个子任务=>
private void GetMoreData(some arguments) { //calling in 2-3 times Parallel
Monitor.Enter(_object);
long ? maxSearchResults = 0;
string shopKey = string.Empty;
long ? offSet = 0;
long ? pageSize = 200;
try {
List < Action > delegates = new List < Action > ();
if (maxSearchResults != null) {
double value = double.Parse((maxSearchResults / pageSize).ToString());
iteratorLength = int.Parse(Math.Round(value,MidpointRounding.AwayFromZero).ToString());
//some logic to to get no of times we need to call loops
for (int iterator = 0; iterator < iteratorLength; iterator++) {
offSet = offSet + 1;
delegates.Add(() = >{
ProcessData(arguments.....,offSet);
});
}
}
Parallel.Invoke(delegates.ToArray());
}
catch(Exception ex) {
//throw new Exception....
}
finally {
Monitor.Exit(_object);
}
}
在上面的示例中,如果我们要调用5个循环,
但是当我调试委托数组时,我发现如下所示
GetMoreData(arguments .....,same_shopKey,offSet:5);
GetMoreData(arguments .....,same_shopKey,offSet:5);
GetMoreData(arguments .....,same_shopKey,offSet:5);
GetMoreData(arguments .....,same_shopKey,offSet:5);
代表应该这样工作(我想实现这一目标)==>
GetMoreData(arguments .....,same_shopKey,offSet:2);
GetMoreData(arguments .....,same_shopKey,offSet:3);
GetMoreData(arguments .....,same_shopKey,offSet:4);
GetMoreData(arguments .....,same_shopKey,offSet:5);
解决方法
在循环中,您在哪里
offset = offset + 1;
在此行之后立即创建一个新变量
int x = offset;
并在调用GetMoreData而不是x
时将新变量offset
传递给
GetMoreData(...,offset); //no
GetMoreData(...,x); //yes
简而言之,您的所有代表都在查看 same 变量,该变量现在具有值5,因为它是循环N次迭代后的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。