Во всяком случае, чтобы определить, завершен ли многопоточный метод - PullRequest
0 голосов
/ 14 апреля 2009

У меня есть очередь, которая в основном представляет собой очередь производителей / потребителей в albahari.com книга потоков, которая удаляет элемент очереди из очереди, который представляет собой блок выполнения действия, и затем вызывает метод для выполнения списка действий в элементе очереди.

Я могу достаточно легко убить очередь, включив нулевой блок действий, и заблокировать основной поток, выполнив вращение / ожидание с помощью thread.sleep (), пока счетчик очередей не станет равным нулю, и все потоки не упадут за это время! = нулевой цикл, завершая тем самым, но метод, выполняющий последний список действий, может все еще выполнять последний поток.

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

Это реализация метода уничтожения в интерфейсе, чтобы закрыть его перед вызовом dispose.

Ответы [ 3 ]

2 голосов
/ 14 апреля 2009

Используйте Фонового работника, у которого завершено событие

1 голос
/ 15 апреля 2009

Если вы начинаете тему, как это:

System.Threading.Thread mythread = new System.Threading.Thread();
mythread.Start();

Вы можете проверить:

mythread.IsAlive()

в любой момент, чтобы определить его статус.

0 голосов
/ 04 мая 2009

Используйте атрибут PostSharp для метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...