Относительно того, почему кто-то хотел бы сделать это: множество языков (например, Java) и / или потоковых API (например, Qt) позволяют разработчикам реализовывать потоки, наследуя их от базового класса «thread», а затем перегружая метод, который реализует подпрограмму потока.
При интенсивном использовании этой модели в Qt я нахожу ее очень удобной - вместо того, чтобы потоки предназначались для какой-либо функции или метода, что часто приводит к странному и / или запутанному коду, весь поток содержится внутри объекта.
Вот пример кода с использованием Qt API:
class MyThread : public QThread
{
Q_OBJECT
protected:
void run();
};
void MyThread::run()
{
...something I need threaded...
}
QThread - базовый класс Qt для потоков. Чтобы использовать MyThread, создайте экземпляр объекта потока и вызовите QThread :: start (). Код, который появляется в повторной реализации run (), будет затем выполняться в отдельном потоке.
Что хорошо в этом, я думаю, что это позволяет вам действительно содержать все, что нужно потоку, в одном объекте, и (по моему опыту) это создает очень согласованную объектную модель. Я не думаю, что это отвечает потребностям всех, но я был немного удивлен, что C # не имеет такой базовой модели потоков, чтобы быть честным.
Я определенно не куплю, что класс Thread в C # запечатан из-за сложности ядра; если Qt может предоставить кроссплатформенную библиотеку потоков, которая позволяет наследовать QThread, я не вижу реальной причины, по которой MSFT не может обеспечить такую же возможность в классе потоков в C #.