मेरे द्वारा बनाए गए वेब एपीआई में मेरा निम्नलिखित ऑपरेशन है:
// 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 () काफी लंबा ऑपरेशन है। मेरी समस्या और संदर्भ को देखते हुए, वेबपीआई ऑपरेशन अतुल्यकालिक लाभ कैसे प्रदान करेगा?
GetProductsWithHistoryAsync()
वापस लौटने की आवश्यकता है Task<CartTotalsDTO>
। अगर आप कॉल करने के लिए माइग्रेट करने का इरादा रखते हैं, तो यह आपके लिए async लिखने का एक लाभ हो सकता है, यह भी async होना चाहिए; जैसे ही आप बाकी हिस्सों को माइग्रेट करते हैं तो आपको एसिंक्स पार्ट्स से लाभ मिलना शुरू हो जाता है।
async Task<T>
। याद रखें, AJAX को TPL के अस्तित्व में आने से पहले लागू किया गया था :)