异步处理域事件

时间:2014-04-03 08:55:43

标签: multithreading dependency-injection domain-driven-design onion-architecture domain-events

我已根据Udi Dahan's Domain Events - Salvation article中的规定实施了域事件。

据我了解,域事件可以异步运行到引发它的线程(通常来自域模型或服务)。

不需要任何类型的共享"工作单元或存储库实现,不需要事务一致性。

问题:为什么Udi没有在单独的线程中实现域事件的处理?

例如,我添加了Task的创建以异步处理事件:

public static void Raise<T>(T domainEvent) where T : IDomainEvent
{
    if (Container != null)
    {
        foreach (var handler in Container.ResolveAll<IDomainEventHandler<T>>())
        {
            Task.Factory.StartNew(() => 
            { 
                handler.Handle(domainEvent); 
            }).ContinueWith(t => {
                // Log exception
            }, TaskContinuationOptions.OnlyOnFaulted);
        }
    }
}

是否存在可能由此产生的多线程问题?

编辑:请注意,虽然这些域事件很轻,但它们仍将在IIS上运行,因为这是一个MVC Web项目。

0 个答案:

没有答案