异步/等待不按预期工作

时间:2016-06-24 11:27:36

标签: c# asynchronous

我想平行调用/运行三个任务然后等待他们的结果。从我的服务类我做的是......

        var _validChapterCodesTask = gd.validateChapterCodeDetails(_input1);

        var _validGroupCodesTask = gd.validateGroupCodeDetails(_input1); 

        await Task.WhenAll(_validChapterCodesTask, _validGroupCodesTask);

        var _validChapterCodes = await _validChapterCodesTask;

        var _validGroupCodes = await _validGroupCodesTask;

在我的DAL类中,定义如下:

   public async Task<IEnumerable<ChapterCodeValidationOutput>> validateChapterCodeDetails(GroupMembershipValidationInput gmvi)
    {
        Repository rep = new Repository();
        if (!gmvi._chapterCodes.All(x => x.Equals("")))
        {
            var _validChapterCodes = await rep.ExecuteSqlQueryAsync(typeof(ChapterCodeValidationOutput),SQL.Upload.UploadValidation.getChapterCodeValidationSQL(gmvi._chapterCodes), null);
            return (IEnumerable<ChapterCodeValidationOutput>)_validChapterCodes;
        }
        else
            return new List<ChapterCodeValidationOutput>();
    }


    public async Task<IEnumerable<GroupCodeValidationOutput>> validateGroupCodeDetails(GroupMembershipValidationInput gmvi)
    {
        Repository rep = new Repository();
        if (!gmvi._chapterCodes.All(x => x.Equals("")))
        {
            var _validGroupCodes = await rep.ExecuteSqlQueryAsync(typeof(GroupCodeValidationOutput), SQL.Upload.UploadValidation.getGroupCodeValidationSQL(gmvi._groupCodes), null);
            return (IEnumerable<GroupCodeValidationOutput>)_validGroupCodes;
        }
        else
            return new List<GroupCodeValidationOutput>();
    }

但这些没有按预期工作?断点命中显示该方法逐个从服务调用,转到DAL,执行数据库查询并返回并分配给各自的变量。

一旦它命中

await Task.WhenAll(_validChapterCodesTask, _validGroupCodesTask);

未命中接下来的几行,控件返回到调用控制器。

我如何取回他们的结果并平行发射并等待他们的结果?

我做错了什么?

1 个答案:

答案 0 :(得分:0)

await Task.WhenAll(_validChapterCodesTask,_validGroupCodesTask)

创建一个应该等待的任务。在调用控制器中使用await。