Well, now I can answer my questions.
Question 1 : From Do asynchronous operations in ASP.NET MVC thread from ThreadPool to .NET 4
Yes - all threads from the pool thread. Your MVC application is already multithreaded when the request arrives in a new thread, will be taken from the pool and used to serve the request. This thread will be "blocked" (from other requests) until the request is fully serviced and completed. If there is no thread in the pool, the request will have to wait until it is available. If you have asynchronous controllers, they still receive the stream from the pool, but when serving the request, they can refuse the stream, waiting for something (and this stream can be transferred to another request), and when the original request needs the stream again, it gets one from the pool .
Question 2: If the code is running in a different thread, what about the WebRequest context?
From ewk and http://vegetarianprogrammer.blogspot.fr/2012/12/understanding-synchronizationcontext-in.html and https://msdn.microsoft.com/en-us/magazine/gg598924.aspx
In the SynchronisationContext, verify that the web request (HttpContext.Current) is correctly installed in the current thread when execution resumes. This is part of the background work of ASP.NET.
Will DI correctly track the completion of this deferred call and not call Dispose () before the async code actually ends?
Since the web request passes through as many threads as possible and does not end with the initial stream, I see no reason why the EndRequest event will fire before the full stream is completed. Thus, I no longer see the reasons why the PerRequestLifeTimeManager or other PerRequest strategy will fail by calling some Dispose () before it is needed.
Question 3 Γ 4 : Async and EF. As ewk mentioned, Entity Framework is safe if you do not use it in different threads at the same time. Since questions 3 and 4 show different ways of getting into DbContext, the answer is this: to be safe, there should be only one simultaneous access to DbContext, regardless of how you run tasks. As mentioned in ewk, direct rotation of two tasks using the same dbcontext is NOT safe.