Ho un dubbio con il threading delle chiamate di servizio dati all'interno di un ciclo foreach. Ecco qui:
Supponiamo che tu debba richiedere i dati da un servizio e quindi elaborare tali dati, per questo esempio, supponiamo che la richiesta di dati impieghi 2 secondi e che l'elaborazione dei dati ne richieda un'altra. Se dovessi elaborare un elenco di 10000 elementi, come faresti?
La cosa che ho provato è stata:
Dictionary<int,Task<DataResponse>> d_tasks = Dictionary<int,Task<DataResponse>>();
for(int i=0;i<listOfElements;i++)
{
if(i=0)
//create and run task for first element, save it for latter use in d_tasks
if(not last item)
//create and run task for next element, save it for latter use in d_tasks
if(i>0)
//clean task data from previous element (clean d_tasks)
d_tasks[listOfElements[i].Wait();
DoWorkWithData(d_tasks[listOfElements[i].Result);
}
in questo modo sono stato in grado di ridurre il tempo nel ciclo, poiché ero in grado di utilizzare la latenza dal servizio per elaborare i dati.
Quindi ecco l'ultima domanda, è ok? sto dimenticando qualcosa? c'è qualche tipo di schema per questo tipo di situazioni?
Qualsiasi aiuto è apprezzato.