使用参数c#并行任务运行

问题描述

我需要并行执行一些流程,但是主要的问题是,我正在将参数传递给该流程
。 该过程有两个子任务=>

  1. 调用API 2.将来自API的响应保存到数据库//calling in this function ProcessData(arguments.....,shopKey,offSet);
    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次迭代后的值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...