Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表<;任务<;结果>&燃气轮机;所有任务都有相同的结果_C#_List_Task - Fatal编程技术网

C# 列表<;任务<;结果>&燃气轮机;所有任务都有相同的结果

C# 列表<;任务<;结果>&燃气轮机;所有任务都有相同的结果,c#,list,task,C#,List,Task,我是C#的新手,我必须为我的教育考试写一个小项目 我必须每隔500毫秒(500毫秒)通过telnet读取一些传感器。 因此,我通过使用任务类来实现这一点。 我在每个周期生成一个任务列表,等待它们准备就绪(超时后,我使用令牌取消它们),然后读取结果。 但是所有的结果都是一样的,也许它们都是第一个或最后一个任务,这是有反应的 以下是我的片段: do { finished = false; activcnt = 0

我是C#的新手,我必须为我的教育考试写一个小项目

我必须每隔500毫秒(500毫秒)通过telnet读取一些传感器。
因此,我通过使用
任务
类来实现这一点。
我在每个周期生成一个任务列表,等待它们准备就绪(超时后,我使用令牌取消它们),然后读取结果。
但是所有的结果都是一样的,也许它们都是第一个或最后一个任务,这是有反应的

以下是我的片段:

do
            {
                finished = false;
                activcnt = 0;
                tskcnt = 0;
                cts = new CancellationTokenSource();
                CancellationToken ct = cts.Token;
/// generate Tasks               
                messcnt++;
                val.mscount = messcnt;
                sw.Start();
                for (int i = 0; i < arrlengt; i++)
                {
                    if (clients[i] != null && clients[i].Connected && 
                        (parent._swork.lstSensor[i].sensState==1)  ) 
                    {
                        task2arr[tskcnt] = parent._swork.lstSensor[i].sensIdx;                    
                        tasks.Add(Messung(clients[i], parent._swork.lstSensor[i], val, ct));                        
                    }
                }
 /// wait until tasks are running     
               try {
                   if (!Task.WaitAll(tasks.ToArray(), 400))
                   {
                       cts.Cancel();
                   }
                   else
                   {
                       finished = true;
                   }
                }  catch (Exc.. e){..}          
                   time = (sw.ElapsedMilliseconds);
 /// result to list
                var results = new List<Values>(6);
                   foreach (var item in tasks)
                   {
                       results.Add(item.Result);
                   } 
                }
                _output.LogOutput(results);

                CheckErrorCnt(arrlengt, errcnt);

                tasks.Clear();
                time = (intervall - sw.ElapsedMilliseconds);
                Thread.Sleep((int)time);
                sw.Stop();                
                sw.Reset();
            }
           while (parent._gblset.measurestart == true);


private  Task<Values> Messung(TcpClient client , Sensor sens , Values val, CancellationToken ct )
        {
            string msg;

                return Task.Run(() =>
                {
                    int mscnt = val.mscount;                    
                    var _con = new Connecting();

                    if (ct.IsCancellationRequested)
                    {
                        msg= sens.name+" : No response within specified time";
                        val.errstring = msg;
                        return val;
                    }

                   string response = _con.GetMeasure(client, ct);

                   val = parent._calc.GetValues(response, sens.kennIdx);
                   val.sensname = sens.name;
                   val.channame = sens.description;
                   val.sensidx = sens.sensIdx;
                   val.mscount = mscnt;

                   if (ct.IsCancellationRequested)
                   {
                       msg = "Error: " + sens.name + " : No response within specified time";
                       val.errstring = msg;
                       return val;
                   }
                    return val;
                });               
            }
        }
do
{
完成=错误;
activcnt=0;
tskcnt=0;
cts=新的CancellationTokenSource();
取消令牌ct=cts.Token;
///生成任务
messcnt++;
val.mscount=messcnt;
sw.Start();
对于(int i=0;i
{
int mscnt=val.mscount;
var_con=新连接();
如果(ct.IsCancellationRequested)
{
msg=sens.name+“:指定时间内无响应”;
val.errstring=msg;
返回val;
}
字符串响应=_con.GetMeasure(客户端,ct);
val=父项。\u计算获取值(响应,sens.kennIdx);
val.sensname=sens.name;
val.channame=sens.description;
val.sensidx=sens.sensidx;
val.mscount=mscnt;
如果(ct.IsCancellationRequested)
{
msg=“错误:“+sens.name+”:在指定时间内没有响应”;
val.errstring=msg;
返回val;
}
返回val;
});               
}
}

您能验证您的代码片段吗?看起来您可能缺少某些部分(例如,尝试后没有捕获)。我甚至不认为这会被编译。在这篇文章中,我将代码片段缩减到核心。没有错误处理,也没有异常处理。这在我的项目中效果很好。