我遇到了这个有趣的问题:
如果我有一个事件和订阅此事件的 2 个长计算函数:
它似乎是同步工作的:(方法 2 必须等待方法 1 完成)
public class A
{
public event Action f;
public void Start()
{
f();
}
}
void Main()
{
A a = new A();
a.f += Work1;
a.f += Work2;
a.Start();
}
public void Work1()
{
"w1 started".Dump();
decimal k = 0;
for(decimal i = 0; i < (99999999); i++)
{
k++;
}
"w1 ended".Dump();
}
public void Work2()
{
"w2 started".Dump();
decimal k = 0;
for(decimal i = 0; i < 99999999; i++)
{
k++;
}
"w2 ended".Dump();
}
结果:
问题:
恕我直言,它有一个调用列表,那是是它同步运行的原因。
如何让它A同步
运行?
最佳答案
事件本身将始终运行一个接一个订阅者。
但是你总是可以,例如用 Task
包裹你的方法
void Main()
{
A a = new A();
a.f += () => Task.Factory.StartNew(Work1);
a.f += () => Task.Factory.StartNew(Work2);
a.Start();
}
或者使用其他类型的多线程。
关于c# - 异步运行 .net 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11965357/