Tengo la siguiente operación en una API web que creé:
// 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);
}
La llamada a este servicio web se realiza a través de una llamada Jquery Ajax de esta manera:
$.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);
}
});
He visto algunos desarrolladores que implementan la operación anterior de esta manera:
// 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));
}
Sin embargo, debo decir que GetProductsWithHistory () es una operación bastante larga. Dado mi problema y contexto, ¿cómo me beneficiará hacer que la operación webAPI sea asincrónica?
GetProductsWithHistoryAsync()
devolución Task<CartTotalsDTO>
. Puede ser beneficioso escribir su controlador asíncrono si tiene la intención de migrar las llamadas que realiza para que también sean asíncronas; luego comienza a beneficiarse de las partes asincrónicas a medida que migra el resto.
async Task<T>
. Recuerde, AJAX se implementó antes de que existiera el TPL :)