Можно ли использовать ThreadPool из потока в C #? - PullRequest
3 голосов
/ 30 марта 2011

Я работаю над небольшим приложением, которое будет использовать потоки для выполнения некоторых веб-запросов.Я хочу, чтобы при нажатии кнопки X запускалась основная Thread , которая управляла бы ThreadPool , потому что в зависимости от результатов первой группы потоков мне придется открывать больше или меньше потоковпосле.

Это хорошая практика или есть лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 30 марта 2011

ThreadPool, безусловно, можно использовать из любого потока в C #.

Предположим, что когда вы нажимаете кнопку в вашем пользовательском интерфейсе, она будет вызывать:

object state = ...some value...;
ThreadPool.QueueUserWorkItem(MyHandler, state);

...

private void MyHandler(object state)
{
    object newState = ... do something with state ...
    ThreadPool.QueueUserWorkItem(HandleMoreWorkToDo, newState);
}

Вам просто нужно быть осторожным с тем, какие ресурсы вы используете в своих обработчиках, чтобы они не изменяли состояние объекта, которым манипулируют в другом потоке.

0 голосов
/ 30 марта 2011

Если я вас понимаю, вы хотите запустить поток, а затем разрешить ему использовать пул потоков для создания дополнительных потоков. Если это правильное предположение, вы можете легко это сделать.

Если вы говорите об управлении потоками самостоятельно, это вариант. Пытаться по-настоящему управлять пулом потоков из своего собственного кода, это неприятно и так же плохо, как пытаться контролировать GC.

Больше или меньше потоков - это то, с чем вам может помочь пул потоков.

...