异步运行.net事件?

时间:2012-08-15 07:12:00

标签: c# .net events .net-4.0

我遇到了这个有趣的问题:

如果我有一个事件和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();
}

结果:

enter image description here

问题:

恕我直言,它有一个调用列表,而那个是它同步运行的原因。

如何让它运行A-synchronously

1 个答案:

答案 0 :(得分:8)

事件本身将始终一个接一个地运行它。

但你可以随时用Task

包装你的方法
void Main()
{
    A a = new A();
    a.f += () => Task.Factory.StartNew(Work1);
    a.f += () => Task.Factory.StartNew(Work2);
    a.Start();
}

或使用其他类型的多线程。