我在ASP WebApi站点中有一个存储库方法
public async Task<IEnumerable<Animal>> GetAnimals(List<long> herdIds)
{
using (var sqlConnection = new OracleConnection(Connectionstring))
{
await sqlConnection.OpenAsync();
var sql = GetCommonSqlQuery(herdIds, true);
var result = await sqlConnection.QueryAsync<Prop1, Prop2, Prop3, Prop1>(
sql,
(a, g, b) =>
{
a.Prop2 = g;
a.Prop3= b;
return a;
});
return result;
}
}
我用
Task<IEnumerable<Animal>> animalsTask = animalsRepository.GetAnimals(herdIds);
Task<List<AnalysisAnimalTest>> testsTask =analysisId.HasValue ? GetAnalysisAnimalTests(analysisId.Value, herdIds) : null;
await Task.WhenAll(new List<Task> {testsTask, animalsTask}.Where(t => t != null));
但是如果我调试并跳过这段代码,那么它就会停止并执行
Task<IEnumerable<Animal>> animalsTask = animalsRepository.GetAnimals(herdIds);
我希望两个任务并行运行,因此在等待
之前它不应该停止并完成执行await Task.WhenAll(new List<Task> {testsTask, animalsTask}.Where(t => t != null));
我是否误解了一些基本的Await / Async内容或使用dapper框架错误了?
它也可能是我使用Devart Oracle驱动程序的OpenAsync,但不完全确定,在阅读"open/close" SqlConnection or keep open?时,似乎我应该在每个存储库方法中打开和关闭。