IMHO, multi threading using ThreadPool is the best option as it avoids overloading the CPU and removes a lot of performance bottlenecks..

Threadpool gets the threads allocated from the underlying framework and thus avoids lots of complications.