Dapper没有与Devart oracle驱动程序一起运行Async

时间:2017-03-23 14:33:41

标签: c# asynchronous asp.net-web-api async-await dapper

我在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?时,似乎我应该在每个存储库方法中打开和关闭。

0 个答案:

没有答案