现在我仰视AutoMapper代码(评估它的我的工作项目之一),而且,坦率地说,我很惊讶:AutoMapper中的Mapper.Map是否线程安全?
- 库API是基于一个静态接入点(
Mapper
类型),所以通常它的任何方法都必须是线程安全的 - 但我没有在代码中找到任何这方面的证据。
所有我能找到是this issue,但即使在发言中似乎有不正确的:如果Map
不使用线程安全的数据结构的内部,它不能也视为线程安全的,如果我打算在非并发上下文中调用CreateMap
,但要同时拨打Map
。
I.e.在例如AutoMapper中唯一可能的使用模式ASP.NET MVC应用程序是:
lock (mapperLock) {
... Mapper.AnyMethod(...) ...
}
显然,如果我是正确的,这是一个巨大的缺乏。
所以我有两个问题:
- ,对吗?
- 如果是的话,AutoMapper的最佳替代方案是什么?
主要关键似乎是通过'ThreadSafeList _typeMaps'进行的双重检查;是什么让你觉得它不是线程安全的?你认为什么***特别是不是线程安全的? –
TypeMap是一个不可变的对象吗? –
你告诉我! (并且问题也是:即使不是,在任何时候都不恰当地更新,除了你)。你声称它不是线程安全的;请详细说明你认为不安全的事情。请注意,通常策略(一旦构建)未更新,因此唯一需要保护的是访问战略缓存,这似乎是正确完成的。 –