2013-07-26 5 views
-4

Здравствуйте, Заинтересованы в решении этой проблемы здесь. Скажем, есть два способа:синхронизация потоков в C#

public string method_A() 
{ 
    //some code 
    return string url; 
} 

public void method_B(string url) 
{} 

мне нужно запустить метод А в 1 нить, после того, как он возвращает строку URL 200 нитей должен быть запущен. Когда один из 200 потоков получает информацию о том, что адрес URL-адреса возвращает ошибку 404, все 200 потоков прерываются, 1 поток метода_A запускается снова, получает новый url и 200 потоков продолжают работать с новым URL-адресом.

Пожалуйста, расскажите мне, как все это можно реализовать. заранее спасибо

+0

для начинающих, посмотрите на 'ManualResetEvent',' ThreadStart', 'Thread.Join' –

+0

Проведите поиск по C#, многопоточности и Async/Await или TPL (Task Parallel Library) в зависимости от того, какая версия .Net вы с помощью. – Kevin

+1

Вы пишете инструмент отказа в обслуживании? ; О) –

ответ

0

Скорее всего, вам понадобится какой-то глобальный класс или структура, которые вы используете между потоками, вызывая lock (myThreadObject) { /* Your thread code */ } в каждом из ваших потоков. Затем этот объект может содержать информацию о том, был ли обнаружен 404, а затем использовать основной поток для управления созданием и удалением потоков при изменении этого состояния.

Надеюсь, это поможет.

1

Вам не нужно использовать темы здесь. Задачи намного лучше альтернативы, так как вы выполняете операции с привязкой к вводу/выводу, если она была связана с ЦП, тогда да. Использование потоков будет более сложным и неэффективным. Я бы предложил вам посмотреть на первый ответ этого сообщения here. В нем есть пример того, как делать маркеры отмены и как обрабатывать задачи.

Смежные вопросы