내가 만든 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);
}
이 웹 서비스에 대한 호출은 다음과 같이 Jquery Ajax 호출을 통해 수행됩니다.
$.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);
}
});
이 방법으로 이전 작업을 구현하는 일부 개발자를 보았습니다.
// 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));
}
그래도 GetProductsWithHistory ()는 꽤 긴 작업입니다. 내 문제와 컨텍스트를 감안할 때 webAPI 작업을 비동기식으로 만들면 어떤 이점이 있습니까?
GetProductsWithHistoryAsync()
반환 Task<CartTotalsDTO>
. 비동기로 만드는 호출을 마이그레이션하려는 경우 컨트롤러 비동기를 작성하면 이점이있을 수 있습니다. 그런 다음 나머지 부분을 마이그레이션하면서 비동기 부분의 이점을 얻기 시작합니다.
async Task<T>
. TPL도 :) 존재하기 전에 AJAX 구현 된 기억