Tôi có thao tác sau trong API Web mà tôi đã tạo:
// 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ệnh gọi đến dịch vụ web này được thực hiện thông qua lệnh gọi Jquery Ajax theo cách này:
$.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);
}
});
Tôi đã thấy một số nhà phát triển triển khai hoạt động trước đó theo cách này:
// 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));
}
Tuy nhiên, phải nói rằng GetProductsWithHistory () là một hoạt động khá dài. Với vấn đề và bối cảnh của tôi, việc làm cho hoạt động webAPI không đồng bộ sẽ có lợi cho tôi như thế nào?
GetProductsWithHistoryAsync()
trả lại Task<CartTotalsDTO>
. Có thể có một lợi ích khi viết bộ điều khiển của bạn không đồng bộ nếu bạn định chuyển các lệnh gọi mà nó thực hiện thành không đồng bộ; thì bạn bắt đầu nhận được lợi ích từ các phần không đồng bộ khi bạn di chuyển phần còn lại.
async Task<T>
. Hãy nhớ rằng, AJAX được thực hiện trước khi TPL thậm chí tồn tại :)