At any time when your application has tasks that can be divided into separate groups, it is a candidate for multithreading. Be warned that this is a dangerous game, although - for each article you can learn about the benefits, there are two problems with the bite of a multi-threaded implementation - it can create errors that occur only in certain configurations (on users' computers), or, what else worse, it cannot be duplicated in the debugger, because the action of slowing down execution is enough so that the error does not appear (race conditions are notorious for this behavior).
, . .NET, , :