我有以下课程:
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方法并且执行是顺序的(&#34;文件被复制...&#34;事件始终执行首先)
我尝试过任务:
Task.Run(... OnLog())....
但问题是,有时创建的任务以后会在先前创建的任务之前引发事件。 (正如预期的那样,考虑到我没有做同步。)
我怀疑有一些最简单的方法可以完成此任务(按顺序和异步方式调用事件)。
答案 0 :(得分:3)
存储您上次使用的SELECT pid, COUNT(pid) FROM products_order GROUP BY pid;
- 对象并使用ContinueWith。
它告诉您的任务在第一个任务完成后继续新的事件调用。因此,事件不会并行触发,而是顺序触发。
Task
会返回一个新的ContinueWith
- 对象,因此您需要更新您的引用,以便下一个Task
- 调用成功。
这不是线程安全的,但只要你只从一个线程调用它就可以工作(并且对我来说很完美)。