It depends on what you are doing - if you are not going to use any new functions in Task and TPL, and your existing code is working, there is no reason to change.
However, Task has many advantages - especially for operations that you want to run on a thread in a thread pool and return a result.
Also, given that you use "threads for each socket", you are likely to have more life threads. Thus, if you switch to Task.Factory.StartNew , you may want to indicate that the tasks should be LongRunning or you will complete using many ThreadPool threads for your socket data (with the default scheduler).
source share