gpt4 book ai didi

c# - 如何异步和顺序调用事件?

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:01 26 4
gpt4 key购买 nike

我有以下类(class):

class Integration
{
public event EventHandler<LogEventArgs> LogMessageEvent

protected virtual void OnLog(LogEventArgs e)
{
if(LogMessageEvent != null)
LogMessageEvent(this, e);
}

public void SomeWork()
{
//Do some things...

var e = new LogMessageEvent("The file was copied...");
OnLog(e);

//Do more things...

var e = new LogMessageEvent("Another thing...");
OnLog(e);
}
}

我需要事件订阅者不阻塞 SomeWork 方法并且执行是顺序的(“文件已复制...”事件总是首先执行)

我尝试过任务:

Task.Run(... OnLog())....

但问题在于,有时稍后 创建的任务会在先前创建的任务之前 引发事件。 (正如预期的那样,考虑到我没有进行同步。)

我怀疑有一些最简单的方法可以完成这个任务(顺序和异步调用事件)。

最佳答案

存储您最后使用的Task-对象并使用ContinueWith .

它告诉您的任务在第一个任务完成后继续新的事件调用。所以事件不是并行触发的,而是顺序触发的。

ContinueWith 返回一个新的 Task 对象,因此您需要更新您的引用,以便下一个 ContinueWith 调用能够成功。

这不是线程安全的,但只要您只从一个线程调用它,它就应该可以工作(并且对我来说非常完美)。

关于c# - 如何异步和顺序调用事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31206305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com