I am trying to understand how to write async controllers in webapi. Below is an example, I fake a 5 sec work in DB.
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private readonly ILogger<WeatherForecastController> _logger;
    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }
    [HttpGet(Name = "GetWeatherForecast")]
    public async Task<int> Get()
    {
        var r = new ServiceLayer();
        var res = r.getDataAsync(_logger);
        var res2 = r.getDataAsync(_logger);
        var val = await res;
        var val2 = await res2;
        _logger.Log(LogLevel.Error, "UNDER");
        
        return val+val2;
    }
}
public class ServiceLayer
{
    public Task<int> getDataAsync(ILogger<WeatherForecastController> _logger)
    {
        var a = new DAtaBaseLayer();
        return a.queryAsync(_logger);
    }
}
public class DAtaBaseLayer
{
    public Task<int> queryAsync(ILogger<WeatherForecastController> _logger)
    {
        var t = new Task<int>(() =>
        {
            _logger.Log(LogLevel.Error, "BEFORE");
            Thread.Sleep(5555);
            _logger.Log(LogLevel.Error, "AFTER");
            return 77;
        });
        t.Start();
        return t;
    }
}
I am a bit confused what would be the difference if I let the ServiceLayer be async too. What benefit would I get?
Is this idiomatic?
Should it then not be called getDataAsync but instead getData?
public class ServiceLayer
{
    public async Task<int> getDataAsync(ILogger<WeatherForecastController> _logger)
    {
        var a = new DAtaBaseLayer();
        return await a.queryAsync(_logger);
    }
}
 
    