ContinueWhenAll和TaskCompletionSource时,任务永远不会完成

时间:2013-12-06 13:58:00

标签: c# c#-4.0 task-parallel-library

我正在尝试强制加载异步数据源,但是要同步等待它,以便它与遗留代码一起使用(使用.net4.0)。

如果我创建了几个任务,使用TaskCompletionSource超过1000并注释掉ContinueWhenAll,最终每个任务都按预期异步完成。但是当我介绍ContinueWhenAll时,我只能在一个任务上设置TaskCompletionSource。

是否可以等待所有TaskCompletionSource设置然后从LoadAllRows方法中转义?

任何帮助将不胜感激,

干杯

    public void LoadAllRows()
    {
        var allLoaded = false;

        var tasks = new List<Task<bool>>();
        for (var i = 0; i <= mDataRowCount; i++)
            tasks.Add(EnsureRowLoaded(mDataController, i));

        Task.Factory.ContinueWhenAll(tasks.ToArray(), (antecendents) =>
        {
            //Check all loaded here
        }).Wait();
        if (!allLoaded)
        {
            //Throw some exception
        }
    }

    private Task<bool> EnsureRowLoaded(AsyncServerModeDataController dataController, int rowHandle)
    {
        var tcs = new TaskCompletionSource<bool>();
        //Async method with callback setting the tcs result
        dataController.EnsureRowLoaded(rowHandle, o => tcs.SetResult(true));
        return tcs.Task;
    }

0 个答案:

没有答案