danash Ответов: 3

Советы по нарезанию резьбы и вопросы


I have a website that goes out and queries/consumes 12 different Webservices. Some are SOAP, some URL-REST. Right now the code is set up like a Rolodex, as one Webservice result is returned the next request is fired off. Been reading up on threads and am wondering if this is a good way to go with consuming Web services or is there another avenue I should look at. Webservice results are usually pretty fast but the way the site is working now If one webservice is slow or down it slows the whole process down. If I go to use of threads my main concern is how do know when the treads are finished individually so I can process and display all the results.

Спасибо.

Что я уже пробовал:

просто начинаю и изучаю темы. Нужен совет или направление.

3 Ответов

Рейтинг:
24

RickZeeland

Современный (и рекомендуемый) способ делать вещи-это использовать Задачи, видеть: Класс Задач (System.Нарезание резьбы.Задачи) | Microsoft Docs[^]
Если вы хотите узнать, что такого замечательного в задачах, прочтите эту серию статей CodeProject:
Библиотека параллельных задач: 1 н[^]

Вы можете использовать Задача.IsCompleted чтобы проверить, закончена ли задача.


Рейтинг:
2

honey the codewitch

Используйте задачи (System.Нарезание резьбы.Задачи) вместо потоков, таким образом, вы даже не обязательно выделите поток для операции.

Например, многие ваши сервисы привязаны к IO - ожиданию циклов ответа на HTTP-запрос.

Вы можете выполнить ожидание ядра, приостановив его и запустив другой код, не создавая отдельного потока. (Windows обрабатывает его внутренне, через IOCP и .NET дает вам возможность использовать его через задачи)

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

Рик Зиланд написал первым, так что примите его, если вы хотите принять любого из нас, но я хотел бы дать вам немного информации о задачах


Рейтинг:
1

Gerry Schmitz

Добавьте обратные вызовы для каждого события "завершено" службы. Запуск всех служб.

В каждом обратном вызове установите индикатор завершения этой службы. В то же время проверьте все остальные "сервисные" индикаторы. Когда все индикаторы установлены, все службы запущены, и последний обратный вызов может вызвать событие "все завершено".

Как: асинхронно вызывать операции Службы WCF | Microsoft Docs[^]