Ich habe die folgende Operation in einer von mir erstellten Web-API:
// 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);
}
Der Aufruf dieses Webservices erfolgt über einen Jquery Ajax-Aufruf auf folgende Weise:
$.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);
}
});
Ich habe einige Entwickler gesehen, die die vorherige Operation folgendermaßen implementieren:
// 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));
}
Ich muss jedoch sagen, dass GetProductsWithHistory () eine ziemlich lange Operation ist. Wie kann ich angesichts meines Problems und meines Kontextes davon profitieren, wenn ich die webAPI-Operation asynchron mache?
GetProductsWithHistoryAsync()
Rückgabe Task<CartTotalsDTO>
. Das asynchrone Schreiben Ihres Controllers kann von Vorteil sein, wenn Sie die Aufrufe migrieren möchten, die auch asynchron sind. Dann profitieren Sie von den asynchronen Teilen, während Sie den Rest migrieren.
async Task<T>
. Denken Sie daran, AJAX wurde implementiert, bevor die TPL überhaupt existierte :)