J'ai l'opération suivante dans une API Web que j'ai créée:
// GET api/<controller>
[HttpGet]
[Route("pharmacies/{pharmacyId}/page/{page}/{filter?}")]
public CartTotalsDTO GetProductsWithHistory(Guid pharmacyId, int page, string filter = null ,[FromUri] bool refresh = false)
{
return delegateHelper.GetProductsWithHistory(CustomerContext.Current.GetContactById(pharmacyId), refresh);
}
L'appel à ce service Web se fait via un appel Jquery Ajax de cette façon:
$.ajax({
url: "/api/products/pharmacies/<%# Farmacia.PrimaryKeyId.Value.ToString() %>/page/" + vm.currentPage() + "/" + filter,
type: "GET",
dataType: "json",
success: function (result) {
vm.items([]);
var data = result.Products;
vm.totalUnits(result.TotalUnits);
}
});
J'ai vu des développeurs qui implémentaient l'opération précédente de cette façon:
// GET api/<controller>
[HttpGet]
[Route("pharmacies/{pharmacyId}/page/{page}/{filter?}")]
public async Task<CartTotalsDTO> GetProductsWithHistory(Guid pharmacyId, int page, string filter = null ,[FromUri] bool refresh = false)
{
return await Task.Factory.StartNew(() => delegateHelper.GetProductsWithHistory(CustomerContext.Current.GetContactById(pharmacyId), refresh));
}
Je dois dire, cependant, que GetProductsWithHistory () est une opération assez longue. Compte tenu de mon problème et de mon contexte, comment le fait de rendre l'opération webAPI asynchrone me sera-t-il bénéfique?
GetProductsWithHistoryAsync()
retour Task<CartTotalsDTO>
. Il peut y avoir un avantage à écrire votre contrôleur de manière asynchrone si vous avez l'intention de migrer les appels qu'il effectue pour être également asynchrones; alors vous commencez à tirer parti des parties asynchrones au fur et à mesure que vous migrez le reste.
async Task<T>
. Rappelez-vous, AJAX a été implémenté avant même que le TPL existe :)