Tôi đang cố gắng tận dụng tính năng async/await
của ASP.NET trong dự án API Web của tôi. Tôi không chắc chắn liệu nó sẽ tạo ra bất kỳ sự khác biệt nào về hiệu suất dịch vụ API Web của tôi hay không. Vui lòng tìm bên dưới quy trình làm việc và mã mẫu từ ứng dụng của tôi.Hiệu quả sử dụng async/await với ASP.NET Web API
làm việc Lưu lượng:
UI Application → Web API endpoint (điều khiển) → Gọi phương pháp trong Web lớp dịch vụ API → Gọi một dịch vụ web bên ngoài. (Ở đây chúng ta có sự tương tác DB, vv)
Bộ điều khiển:
public async Task<IHttpActionResult> GetCountries()
{
var allCountrys = await CountryDataService.ReturnAllCountries();
if (allCountrys.Success)
{
return Ok(allCountrys.Domain);
}
return InternalServerError();
}
Dịch vụ Lớp:
public Task<BackOfficeResponse<List<Country>>> ReturnAllCountries()
{
var response = _service.Process<List<Country>>(BackOfficeEndpoint.CountryEndpoint, "returnCountries");
return Task.FromResult(response);
}
Tôi đã thử nghiệm mã trên và đang làm việc. Nhưng tôi không chắc liệu đó có phải là cách sử dụng chính xác của async/await
hay không. Hãy chia sẻ suy nghĩ của bạn.
Cảm ơn Stephen vì những nhận xét quý giá của bạn. Tôi đã thay đổi tất cả các phương thức lớp dịch vụ của mình thành không đồng bộ và bây giờ tôi gọi cuộc gọi REST bên ngoài của mình bằng phương thức ExecuteTaskAsync và đang hoạt động như mong đợi. Cũng cảm ơn cho bài đăng trên blog của bạn về async và Tasks. Nó thực sự đã giúp tôi rất nhiều để có được một sự hiểu biết ban đầu. – arp
Bạn có thể giải thích tại sao bạn không sử dụng Task.Run ở đây? – Maarten
@ Marta: Tôi giải thích nó (một thời gian ngắn) trong [bài viết tôi liên kết tới] (https://msdn.microsoft.com/en-us/magazine/dn802603.aspx). Tôi đi vào chi tiết hơn [trên blog của tôi] (http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html). –