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

时间:2016-08-20 17:08:47

标签: c#

当类变量之间运行冲突时!

private myClass[] arrayms = new myClass[5];

foreach (myClass ms in arrayms) {
  if (ms.ScheduleState)
    Task.Factory.StartNew(() => ms.Start());
}

2 个答案:

答案 0 :(得分:0)

  

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

我不理解"冲突变量"。但其余的似乎符合我在之前的评论中描述的内容。即调用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时它可能是infamous scope problem

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());

结束修改

答案 1 :(得分:0)

如何从一个类同时从一个函数运行几个? 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;
        }
        .
        .
        .
    }
}