Je viens de mettre à jour vers .NET 4.5 et je veux profiter des fonctionnalités de la méthode asynchrone. Plus précisément, j'ai une façade qui fait 4 appels api différents et regroupe les réponses dans un seul objet de réponse qui sera renvoyé par mon contrôleur. Comme ces 4 appels ne sont pas liés, ils peuvent être exécutés de manière asynchrone et s'exécuter en parallèle. J'ai vu des exemples de contrôleurs asynchrones, mais je veux que les appels parallèles se produisent dans la classe de façade elle-même. Voilà ce que j'ai jusqu'ici:Façade de service asynchrone dans .NET 4.5
En Facade.cs:
public async Task<Dictionary<string, object>> AggregateServiceResponses(string authTicket)
{
var aggregateServiceResponse = new Dictionary<string, object>();
var asyncManager = new AsyncManager();
asyncManager.OutstandingOperations.Increment(4);
await Task<Dictionary<string, object>>.Factory.StartNew(() =>
{
return _membershipServiceManager.GetMemberResponse(authTicket);
}).ContinueWith(t =>
{
asyncManager.Parameters["memberInfoResponse"] = t.Result;
asyncManager.OutstandingOperations.Decrement();
});
await Task<KeywordingResponseObject[]>.Factory.StartNew(() =>
{
return _keywordingServiceManager.GetKeywordResponse();
}).ContinueWith(t =>
{
asyncManager.Parameters["Keywords"] = t.Result;
asyncManager.OutstandingOperations.Decrement();
});
await Task<FamilyResponseObject[]>.Factory.StartNew(() =>
{
return _familyServiceManager.GetFamilyResponse();
}).ContinueWith(t =>
{
asyncManager.Parameters["Family"] = t.Result;
asyncManager.OutstandingOperations.Decrement();
});
await Task<IEnumerable<Friends>>.Factory.StartNew(() =>
{
return _friendsServiceManager.GetFriendsResponse();
}).ContinueWith(t =>
{
asyncManager.Parameters["Friends"] = t.Result;
asyncManager.OutstandingOperations.Decrement();
});
//After all service calls complete...build composite response...
aggregateServiceResponse.Add("MemberInformation",asyncManager.Parameters["memberInfoResponse"]);
aggregateServiceResponse.Add("Keywords", asyncManager.Parameters["Keywords"]);
aggregateServiceResponse.Add("Family", asyncManager.Parameters["Family"]);
aggregateServiceResponse.Add("Friends",asyncManager.Parameters["Friends"]);
return aggregateServiceResponse;
}
Quelle est votre question? –