4

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

如果我有一个事件和 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-synchronously

4

1 回答 1

8

事件本身总是会一个接一个地运行它的订阅者。

但是你总是可以用例如包装你的方法Task

void Main()
{
    A a = new A();
    a.f += () => Task.Factory.StartNew(Work1);
    a.f += () => Task.Factory.StartNew(Work2);
    a.Start();
}

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

于 2012-08-15T07:19:25.827 回答