У меня есть проект ASP.NET Core 2.1 Web Api с Full Framework, поскольку EF Core по-прежнему не поддерживает отображение хранимых процедур и создание сложных типов.
Так что мой DAL полагается на EF6 против .net 4.61с этим в моем контроллере.С одной стороны, я бы предпочел, чтобы асинхронные операции не блокировали пул потоков запросов, чтобы он мог возвращать и обслуживать другие запросы.С другой стороны, я не должен переносить синхронные операции с Task.Run ().Так что лучше всего выбрать:
[Route("api/[controller]")]
[ApiController]
public class ProductsController : Controller
{
private readonly IDatabaseService databaseService;
public ProductController(IDatabaseService databaseService)
{
this.databaseService = databaseService;
}
[HttpGet]
public Task<ActionResult<Product>> GetAllProducts()
{
return Task.Run(() =>
{
return this.Ok(this.databaseService.GetAllProducts());
});
}
}
или
[Route("api/[controller]")]
[ApiController]
public class ProductsController : Controller
{
private readonly IDatabaseService databaseService;
public ProductController(IDatabaseService databaseService)
{
this.databaseService = databaseService;
}
[HttpGet]
public ActionResult<Product> GetAllProducts()
{
return this.Ok(this.databaseService.GetAllProducts());
}
}
Или я должен сделать это совершенно по-другому и объявить мой метод обслуживания
Task<List<Product> GetAllProducts();
так чего можно ждать?Я начал этот путь, но, с моей точки зрения, единственное отличие состоит в том, что я оборачиваю синхронный вызов БД на один уровень глубже.
Подводя итог моему вопросу:
- Буду признателенчтобы выполнять асинхронные вызовы БД, чтобы в то же время обслуживать другие запросы
- Мне кажется, что использование Task.Run () может быть не лучшим способом для достижения этого
- Так что желучший образец здесь?
Заранее спасибо