作成した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);
}
このWebサービスの呼び出しは、次の方法で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()はかなり長い操作であるとGottaは言います。私の問題とコンテキストを考えると、webAPI操作を非同期にすることはどのように役立ちますか?
GetProductsWithHistoryAsync()
返しますTask<CartTotalsDTO>
。コントローラが非同期にする呼び出しも移行する場合は、コントローラを非同期で記述することにもメリットがあります。その後、残りの部分を移行するときに、非同期の部分からメリットを得ることができます。
async Task<T>
。TPLも:)存在していた前に、AJAXが実装された、覚えておいてください