Mam .NET rdzeń Web API, które jako warstwę usługi. Warstwa serwisowa ma cały kod EF.najlepsza praktyka korzystania z async czekać w webapi
Jeśli mają basecontroller z tym kodem
protected Task<IActionResult> NewTask(Func<IActionResult> callback)
{
return Task.Factory.StartNew(() =>
{
try
{
return callback();
}
catch (Exception ex)
{
Logger.LogError(ex.ToString());
throw;
}
});
}
w akcji kontrolera I owinąć wszystkie połączenia do służby w powyższej metody np :
[HttpGet("something")]
public async Task<IActionResult> GetSomething(int somethingId)
{
return await NewTask(() =>
{
var result = _somethingService.GetSomething(somethingId);
if (result != null)
return Ok(result);
else
return NotFound("Role not found");
});
}
Czy to właściwy wzorzec biorąc pod uwagę, że jutro mogę mieć więcej niż jedno wezwanie serwisowe w akcji lub wykonywać połączenia z innymi usługami sieciowymi. Proszę doradź.
Czy możesz podać więcej informacji o tym, co chce osiągnąć tutaj? Twój kod zasadniczo teraz fałszuje pracę asynchroniczną, wykonując pracę synchroniczną w wątku tła. Nie wspominając o używaniu Task.Factory.StartNew jest dość niebezpieczne i powinieneś używać Task.Run zamiast tego, ale nie potrzebujesz nawet Task.Run tutaj. –
coś usługa ma pewne operacje crud, które używają core entityframework. również jutro mogę mieć usługę o nazwie feedService, która będzie miała połączenia, aby pobierać dane z zewnętrznej sieci za pomocą httpclient. Chcę, aby moje api korzystały z async oczekują rzeczy. Powyższe wzorce będą służyły tym potrzebom + wszelkim problemom lub ulepszeniom. – krishna