C# 是否异步运行.net事件?

C# 是否异步运行.net事件?,c#,.net,events,.net-4.0,C#,.net,Events,.net 4.0,我遇到了一个有趣的问题: 如果我订阅了一个事件和2个长计算函数: 它的工作似乎是同步的:(方法2必须等待方法1完成) 公共A类 { 公共事件行动f; 公开作废开始() { f(); } } void Main() { A=新的A(); a、 f+=1; a、 f+=2; a、 Start(); } 公共工程1() { “w1已启动”。转储(); 十进制k=0; 对于(十进制i=0;i

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

如果我订阅了一个事件和2个长计算函数:

它的工作似乎是同步的:(方法2必须等待方法1完成)

公共A类
{
公共事件行动f;
公开作废开始()
{
f();
}
}
void Main()
{
A=新的A();
a、 f+=1;
a、 f+=2;
a、 Start();
}
公共工程1()
{
“w1已启动”。转储();
十进制k=0;
对于(十进制i=0;i<(9999999);i++)
{
k++;
}
“w1结束”。转储();
}
公共工程2()
{
“w2已启动”。Dump();
十进制k=0;
对于(十进制i=0;i<9999999;i++)
{
k++;
}
“w2结束”。转储();
}
结果:

问题:

它有一个调用列表,这就是它同步运行的原因


如何使其同步运行?

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

但是,您始终可以(例如)使用


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

@Tigran是的,但您也可以使用
BackgroundWorker
Thread
或带有
BeginInvoke
的异步委托调用等。
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();
}
void Main()
{
    A a = new A();
    a.f += () => Task.Factory.StartNew(Work1);
    a.f += () => Task.Factory.StartNew(Work2);
    a.Start();
}