I plan to build a refactoring tool that converts Thread usages to corresponding Task constructs. This transformation will open the gate to new features (async/await, Parallel class, PLINQ) for the application. After this transformation, the refactoring tool searches Task usages which are able to use Parallel.For(Each), and Parallel.Invoke. This two step process will have some advantages in terms of performance, readability, scalability, functionality, etc. Do you think that this kind of refactoring tool is useful for the developers? As you know, refactoring tools are good for error-prone transformations and do you observe that developers introduce bugs when they transform Threads to Tasks? I know that the transformation is not straightforward because, for instance, Threads with I/O bound computations should be converted to LongRunning Tasks. Is there any other corner cases like this?