Вызов Thread.Abort в потоке из ThreadPoolC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Вызов Thread.Abort в потоке из ThreadPool

Сообщение Anonymous »

Мой коллега использует стороннюю библиотеку .NET, исходного кода которой у нас нет. Мы используем ThreadPool, чтобы множество потоков обращались к этой библиотеке, и иногда один из потоков просто зависает навсегда, в то время как остальные весело пыхтят.

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

Код: Выделить всё

static Dictionary started = new Dictionary();

static void DoSomeWork(object foo)
{
lock(started)
started[Thread.CurrentThread] = DateTime.Now;

SomeBuggyLibraryThatMightInfiniteLoopOrSomething.callSomeFunction(doo);

lock(started)
started.Remove(Thread.CurrentThread);
}
тогда мы можем заблокировать и перебрать запущенные потоки и вызвать Thread.Abort, чтобы уничтожить их? И если мы это сделаем, то нам нужно будет добавить новый поток в ThreadPool, чтобы заменить тот, который мы только что закрыли, или ThreadPool сделает это за нас?

РЕДАКТИРОВАТЬ: Я прекрасно осведомлен обо всех потенциальных проблемах с Thread.Abort. Я знаю, что в идеале его никогда не следует использовать в производственном коде, и что он не обязательно даже останавливает поток, и что если вы прервете поток, пока поток получил блокировку, вы можете заблокировать другие потоки и т. д. Но сейчас у нас сжатые сроки, и у нас есть веские основания полагать, что в этом конкретном случае мы можем вызвать Thread.Abort, не ставя под угрозу весь процесс, и мы хотели бы избежать переписывания эту программу для устранения ThreadPool, если только это не является абсолютно необходимым.

Итак, я хочу знать следующее: учитывая, что мы БУДЕМ вызывать Thread.Abort в поток, принадлежащий ThreadPool, есть ли какие-либо особые проблемы, вызванные тем, что это потоки ThreadPool, и нужно ли нам вручную запускать новый поток, чтобы заменить уничтоженный, или ThreadPool сделает это за нас?

Подробнее здесь: https://stackoverflow.com/questions/233 ... threadpool
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»