У меня есть 30 дочерних компаний, и каждый из них реализовал свой веб-сервис (с различными технологиями).
Мне нужно внедрить веб-службу для их агрегирования, например, все веб-службы суб-компании имеют веб-метод с именем GetUserPoint(int nationalCode)
, и мне нужно реализовать мой веб-сервис, который будет вызывать все из них и собирать все ответы (например, сумма баллов).
Это мой базовый класс:
public abstract class BaseClass
{ // all same attributes and methods
public long GetPoint(int nationalCode);
}
Для каждой из веб-служб субпартнеров я реализую класс, который наследует этот базовый класс и определяет его собственный метод GetPoint
.
public class Company1
{
//implement own GetPoint method (call a web service).
}
к
public class CompanyN
{
//implement own GetPoint method (call a web service).
}
Итак, это мой веб-метод:
[WebMethod]
public long MyCollector(string nationalCode)
{
BaseClass[] Clients = new BaseClass[] { new Company1(),//... ,new Company1()}
long Result = 0;
foreach (var item in Clients)
{
long ResultTemp = item.GetPoint(nationalCode);
Result += ResultTemp;
}
return Result;
}
ОК, он работает, но он настолько медленный, потому что каждый веб-сервис sub companys размещен на разных серверах (в Интернете).
Я могу использовать параллельное программирование следующим образом: (это называется параллельным программированием!?)
foreach (var item in Clients)
{
Tasks.Add(Task.Run(() =>
{
Result.AddRange(item.GetPoint(MasterLogId, mobileNumber));
}
}
Я думаю, что параллельное программирование (и потоковая передача) не подходит для этого решения, потому что мое решение связано с IO (а не с интенсивностью процессора)!
Вызывать все внешние веб-службы настолько медленно, правда? Многие потоки, ожидающие ответа!
Я думаю, что асинхронное программирование - лучший способ, но я новичок в асинхронном программировании и параллельном программировании.
Каков наилучший способ? (parallel.foreach - async TAP - async APM - асинхронное EAP -прохождение)
Пожалуйста, напишите мне пример.