如何从一个类同时运行两个函数?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#当运行_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());
结束编辑