All'interno di un progetto C# Sto facendo alcune chiamate a una web api, il fatto è che le sto facendo all'interno di un ciclo in un metodo. Di solito non ce ne sono così tanti, anche se pensavo di sfruttare il parallelismo.Dove usare la concorrenza quando si chiama un'API
Quello che sto cercando finora è
public void DeployView(int itemId, string itemCode, int environmentTypeId)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(ConfigurationManager.AppSettings["ApiUrl"]);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var agents = _agentRepository.GetAgentsByitemId(itemId);
var tasks = agents.Select(async a =>
{
var viewPostRequest = new
{
AgentId = a.AgentId,
itemCode = itemCode,
EnvironmentId = environmentTypeId
};
var response = await client.PostAsJsonAsync("api/postView", viewPostRequest);
});
Task.WhenAll(tasks);
}
}
a meno di chiedersi se questo è il percorso corretto, o dovrei cercare di parallelo l'intero DeployView (cioè anche prima di utilizzare il HttpClient)
Ora che ho vederlo pubblicato, mi sa che non posso semplicemente rimuovere la risposta variabile così, basta fare l'attendono, senza impostarla a qualsiasi variabile
Grazie
Beh, in realtà questa è una buona direzione. Ma hai dimenticato la parte più importante. Devi * attendere * i risultati, ad es. * Attendi Task.WhenAll * ma poi devi aggiungere la parola chiave 'async' alla tua funzione DeployView. È meglio fare un tour profondo del paradigma [async/await] (https://msdn.microsoft.com/en-us/library/hh191443.aspx). – ckruczek
qual è il problema/eccezione che stai affrontando? Sono d'accordo anche con ckruczek, non c'è niente di sbagliato nella direzione che stai prendendo..also, vuoi ottenere le risposte? – ojf
Vorrei ricevere le risposte, sì. Ma non sai come usarli se sono tutti Ok – mitomed