Czekam aż kod AutoMapper teraz (oceniając go za jednego z projektów pracuję nad) i, szczerze mówiąc, jestem bardzo zaskoczony:Czy Mapper.Map w AutoMapper wątku bezpieczne?
- API biblioteki jest oparta na jednym statycznym punkt dostępu (typ
Mapper
), więc ogólnie każda z jego metod musi być bezpieczna dla wątków - Ale nie znalazłem ŻADNEGO dowodu tego w kodzie.
Wszystko udało mi się znaleźć to this issue, ale nawet wypowiedź wydaje się nieprawidłowy: jeśli Map
nie używa struktury danych wątku bezpieczny wewnętrznie, to nie można uznać za bezpieczny wątku, jak również, jeśli mam zadzwonić pod numer CreateMap
w kontekście innym niż współbieżny, ale jednocześnie z Map
.
tj. jedyny możliwy wzór użycia AutoMappera w Aplikacja ASP.NET MVC to:
lock (mapperLock) {
... Mapper.AnyMethod(...) ...
}
Oczywiście, jeśli mam rację, to jest duży brak.
Mam więc dwa pytania:
- mam rację?
- Jeśli tak, jaka jest najlepsza alternatywa dla AutoMappera, która nie ma tego problemu?
Klucz główny wydaje się być podwójnym sprawdzanym odnośnikiem za pomocą 'ThreadSafeList _typeMaps'; co sprawia, że myślisz, że nie jest bezpieczny dla wątków? Czego *** konkretnie *** uważasz, że nie jest bezpieczny dla wątków? –
Czy TypeMap jest niezmiennym obiektem? –
ty mi powiedz! (i pytania są również: nawet jeśli nie jest, czy jest niewłaściwie aktualizowany w jakimkolwiek punkcie, innym niż przez ciebie). Stwierdziłeś, że nie jest bezpieczny dla wątków; proszę wyjaśnij, co według Ciebie nie jest bezpieczne. Zwróć uwagę, że zazwyczaj strategia (raz zbudowana) nie jest aktualizowana, więc jedyną rzeczą wymagającą ochrony jest dostęp do pamięci podręcznej strategii, która wydaje się być wykonana poprawnie. –