Running a .NET Core 3.1 API with an async Controller Method that runs multiple DatabaseRepository async methods. I'm calling DatabaseRepository Tasks like this:
public async Task<ActionResult<MyResponse>> GetResultAsync([FromQuery] MyRequest request)
{
var rootData = await _databaseRepository.GetRootDataAsync(request);
//manipulate rootData
var subscriptionsTask = _databaseRepository.GetSubscriptionsAsync(input1);
var productsTask = _databaseRepository.GetProductsAsync(input1, input2);
var assetsTask = _databaseRepository.GetAssetsAsync(input1, input3);
//some other code
var subscriptions = await subscriptionsTask;
//some other code
var products = await productsTask;
var resources = await _databaseRepository.GetResourcesAsync(input2, input4);
var assets = await assetsTask;
//some other code
return Ok(result);
}
DatabaseRepository method all look like this:
public async Task<IEnumerable<MyModel>> GetMyModelAsync(IEnumerable<string> input)
{
//await Task.Delay(1);
return await Elastic.Apm.Agent.Tracer
.CurrentTransaction.CaptureSpan("MyQuery", "DB", async (span) =>
{
span.Labels["query"] = MyQuery;
using var _dbConnection = new OracleConnection(connString);
var myModels = await _dbConnection.QueryAsync<MyModel>(MyQuery,
new
{
input
});
return myModels;
}, "my db query");
}
What I expected is that most of these async methods will run concurrently, but that doesn't happen. How do I know? With Elastic APM.
This is what I see:
https://cdn.discordapp.com/attachments/195830344715337728/757569429683830795/unknown.png
What do I do wrong?