I see a lot of people in blog posts and here on SO either avoiding or advising against the usage of the Thread
class in recent versions of C# (and I mean of course
It's not definitely obsolete.
The problem with multithreaded apps is that they are very hard to get right (often indeterministic behavior, input, output and also internal state is important), so a programmer should push as much work as possible to framework/tools. Abstract it away. But, the mortal enemy of abstraction is performance.
So my question is, are there any cases when it's necessary or useful to use a plain old Thread object instead of one of the above constructs?
I'd go with Threads and locks only if there will be serious performance problems, high performance goals.