c# - 异步运行 .net 事件?

标签 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同步运行?

最佳答案

事件本身将始终运行一个接一个订阅者。

但是你总是可以,例如用 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/

相关文章:

c# - Properties.Settings.Default.Save(); ->那个文件在哪里

javascript - Angular : What is the best way to bind to a global event in a directive

javascript - 防止触摸设备上的 mousemove 事件

c# - 多种方法的线程同步

c# - 使用字符串变量访问静态类成员(字符串包含静态类的名称)

c# - COM 异常 0x800A11F9 - 无法激活应用程序

javascript - 设置值时未触发纸张输入更改事件

c# - 捕获事件窗口的屏幕截图?

c# - 从不同的项目读取 Properties.Settings.Default

c# - 用重音字符反转字符串?