C # Multi Thread Концепция Вопрос - PullRequest
1 голос
/ 26 марта 2011

Кто-нибудь знает, как бы я выполнил задачу ниже? Я играл с пулом потоков в C #, и я не думаю, что это подойдет.

  1. Запустить приложение

  2. Проверка наличия новых клиентов> у клиента есть элементы, над которыми они хотят поработать.

  3. Анализировать запросы клиентов перед выполнением задачи. Теперь следует поставить в очередь для проверки.

  4. Проверять каждого клиента каждые (пример с интервалом времени: 30 секунд)> Выполнить задачу.

  5. В то же время я должен повторить шаги 2-3, потому что я ожидаю:

    1. Новые клиенты
    2. Модифицированные клиенты.
    3. Без изменений.

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

Заранее спасибо!

Ответы [ 2 ]

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

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

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

BlockingCollection - это новый класс, представленный в .Net 4, специально разработанный для этого типа работы. Эта очень хорошая статья о том, как ее использовать.Если вы новичок в параллельном кодировании .Net, вы, вероятно, хотите прочитать всю серию, очень хорошее чтение.

ГДж

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

Вместо использования модели «вытягивания», как вы, разве нельзя использовать модель «выталкивания»? То есть, используя события, а не проверяя состояния вашего клиента каждые x секунд.

Если вы не можете этого сделать, вы можете использовать пул потоков или, возможно, службу Windows.

Риана

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