Mam 30 podsieci i każdy z nich wdrożył ich serwis internetowy (z różnymi technologiami).Najlepszy sposób na połączenie się z wieloma usługami sieciowymi?
Muszę zaimplementować usługę sieciową do ich agregacji, na przykład wszystkie usługi sieciowe podsieci mają metodę sieci o nazwie GetUserPoint(int nationalCode)
i muszę wdrożyć moją usługę sieciową, która będzie wywoływać je wszystkie i zbierać wszystkie odpowiedzi (na przykład suma punktów).
To moja klasa bazowa:
public abstract class BaseClass
{ // all same attributes and methods
public long GetPoint(int nationalCode);
}
Dla każdego z sub firmy usług internetowych, zaimplementować klasę, która dziedziczy tę klasę bazową i zdefiniować swoją własną metodę GetPoint
.
public class Company1
{
//implement own GetPoint method (call a web service).
}
do
public class CompanyN
{
//implement own GetPoint method (call a web service).
}
tak, to jest moja metoda internetowej:
[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;
}
OK, to działa, ale to jest tak powolny, ponieważ każdy Companys sub serwis internetowy jest hostowany na różnych serwerach (w Internecie).
mogę używać równoległego programowanie tak: (jest to nazywane programowanie równoległe !?)
foreach (var item in Clients)
{
Tasks.Add(Task.Run(() =>
{
Result.AddRange(item.GetPoint(MasterLogId, mobileNumber));
}
}
myślę programowanie równoległe (i gwintowania) nie jest dobre dla tego rozwiązania, ponieważ moje rozwiązanie jest związany IO (nie intensywny procesor)!
Zadzwoń do każdej zewnętrznej usługi internetowej jest tak powolny, mam rację? Wiele wątków czekających na odpowiedź!
Myślę, że programowanie asynchroniczne jest najlepszym sposobem, ale jestem nowy w programowaniu asynchronicznym i programowaniu równoległym.
Jaki jest najlepszy sposób? (parallel.foreach - asynchroniczny TAP - asynchroniczny APM - asynchroniczny wątek EAP)
Proszę napisać dla mnie przykład.
Masz wszystkie podstawy w porządku. To całkiem dobry początek. 'Parallel.ForEach' i' Thread's cierpią z powodu tego samego problemu co 'Task.Run' - są dobre dla CPU, a nie dla IO-bound. TAP jest zdecydowanie najłatwiejszy do skomponowania (zasadniczo zachowujesz bieżącą pętlę, ale elementy IO stają się "bez wątków" i bardzo skalowalne). APM i EAP można łatwo przekonwertować do TAP (za pośrednictwem 'Task.Factory.FromAsync' dla APM i' TaskCompletionSource 'dla EAP), więc możesz użyć TAP i podłączyć APM i wywołania EAP, jeśli to zapewniają istniejące API. –