异步运行.net事件?

Roy*_*mir 4 .net c# 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();
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

题 :

恕我直言,它有一个调用列表和就是为什么它同步运行的原因.

我该如何让它运行A-synchronously

slo*_*oth 8

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

但是你可以随时用你的方法包装你的方法 Task

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

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

  • @Tigran是的,但您也可以使用`BackgroundWorker`,`Thread`或使用`BeginInvoke`等异步委托调用. (2认同)