Ve výchozím nastavení by to mělo fungovat tak, že requesty od různých uživatelů (s jiným ASP.NET SessionID) budou obsluhovány paralelně (na CLR Threadpool), ale requesty od stejného uživatele budou "zafrontovány" a zpracovávané postupně. Toto chování odpovídá nastavení SessionStateBehavior.Default (http://msdn.microsoft.com/en-us/library/... ) v kombinaci s tím, že výchozí MVC handler používá ASP.NET Session. Nastavení SessionStateBehavior lze pro MVC controller změnit pomoci atributu SessionStateAttribute (http://msdn.microsoft.com/en-us/library/... ) například:
[SessionState(SessionStateBehaviour.Disabled)]
public class MyController : Controller
{
}
Při nastavení SessionStateBehaviour.Disabled nebo SessionStateBehaviour.ReadOnly (označováno jako Session-less Controller) se budou requesty obsluhovat paralelně i pro stejnou session (a session nebude dostupná resp. bude dostupná jen pro čtení). Pokud ale potřebujete naopak, aby se requesty zpracovávaly postupně i pro různé uživatele, můžete přístup na sdílený objekt (XmlParser) serializovat například pomoci obyčejného locku (což by ale neuvolnilo vlákno) nebo lépe můžete napsat tuto operaci controlleru jako asynchronní (pomoci async/await http://www.asp.net/mvc/tutorials/mvc-4/u... ) a dostupnost sdíleného objektu notifikovat například do awaitované instance TaskCompletionSource (http://msdn.microsoft.com/en-us/library/... ). Ale možná to půjde i jednodušeji.
|