Duplicate:
C#: Asynchronous delegates vs ThreadPool.QueueUserWorkItem when initiating many connections
When should one use the thread pool or make use of delegates to turn a blocking method into one which isn't? Also, when should one just create a thread (I know this is expensive and one guideline is when you're task is long running and not when you're doing several fairly long tasks in quick succession - which is when you use the thread pool).
Any other guidelines to go by?