如何从一个类同时运行两个函数?c#

本文关键字:两个 运行 函数 一个 | 更新日期: 2023-09-27 18:03:18

运行时类变量之间发生冲突!

private myClass[] arrayms = new myClass[5];
foreach (myClass ms in arrayms) {
  if (ms.ScheduleState)
    Task.Factory.StartNew(() => ms.Start());
}

如何从一个类同时运行两个函数?c#

如何从一个类同时运行几个函数?c#当运行_StartTask()时myClass变量与日志结果冲突

private myClass[] arrayms = new myClass[5];
public void _TasksClassCreator()
{
     foreach (var ms in arrayms )
     {
          ms.ScheduleName = SName;
          .
          .
          .
     }
}
public void _StartTask()
{
    foreach (myClass ms in arrayms) 
    {
      if (ms.ScheduleState)
        Task.Factory.StartNew(() => ms.Start());
    }
}
public sealed class myClass
{
    public void Start()
    {
        _TBTask();
    }
    private void _TBTask()
    {
         while(true)
         {
              ...//Conflict here
              // this function always running and reporting result...
              //log here
         }
    }
    private string _ScheduleName;
    public string ScheduleName
    {
        get
        {
            return _ScheduleName;
        }
        set
        {
            _ScheduleName = value;
        }
        .
        .
        .
    }
}

我得到一个文本摘要,类是对象。程序运行时没有错误,只有冲突变量。-

我不理解"冲突变量"。但其余的似乎符合我在之前的评论中所描述的。即调用foreach时,数组为空。也许是这样:

for (int i=0; i < ms.Length; i++) {
  arrayms[i] = new MyClass();
}
// ScheduleState must somehow get set, then:
foreach (myClass ms in arrayms) {
  if (ms.ScheduleState)
    Task.Factory.StartNew(() => ms.Start());
}

编辑

Task.Factory.StartNew(..)做什么?它的名字StartNew意味着创建并启动了一个新对象。但是传递一个启动现有对象的匿名方法。那么我们实际上是从两件事开始的吗?

如果这(下面的注释)不是问题,那么可能是在循环中调用LINQ时臭名昭著的作用域问题:

foreach (myClass ms in arrayms) {
  MyClass workAround = ms;   // must set "ms" to a loop-scoped variable.
                             // why? the answer is TL;DR
  if (workAround.ScheduleState)
    Task.Factory.StartNew(() => workAround.Start());

结束编辑