We have an asp.net application on an iis 7. we need to create an async process to do calculating (using a web service) and not keeping the client waiting, we used ThreadPool to do that (i prefer Tasks but i am a server side guy).
My questions are :
1. if using a thread pool on iis does it take threads from the iis pool from clients or from the OS ?
2. What would you use Tasks or ThreadPool (Tasks give you much more i know but the UI guys like the pool).
Tanks
-
If you're worried about fully loading your server, I would consider using a separate server to process the async requests so that you can scale each type of usage separately (applies if you expect your volume to necessitate more than a handful of servers in total).Eric J.– Eric J.2011-07-14 17:42:19 +00:00Commented Jul 14, 2011 at 17:42
-
we are using the calculating on a different server, but the call to the server and the returned answer is still on the same oneguyl– guyl2011-07-14 18:13:11 +00:00Commented Jul 14, 2011 at 18:13
2 Answers
The ASP.NET host provides a single thread pool per process. So if you're using ThreadPool, then it's taking from the same pool that is drawn from for server requests.
That said, if you're starting background operations that are independent from a single client request, then you should be using a Win32 service, web service, message queue system, or something similar. Running "background" threads in ASP.NET goes against the entire architecture of IIS; it's much easier to scale properly and do other IT work (e.g., restarting app pools) if you maintain the stateless nature of HTTP.
4 Comments
Task, still consumes threads from thread pool.
As far, as I understood you question, 3rd party service performs CPU-heavy calculation, and you need asynchronously wait it to complete.
In case, if you want to postpone page rendering, until computation is complete, Async pages will help. This approach will return processing thread to thread-pool, while waiting.
Could you provide more details about required solution, for more precise answer?