测试程序:

public class TAKS_TEST
{
    private readonly Dictionary<int, Task<T_TEST>> DataDic = new Dictionary<int, Task<T_TEST>>();

    private T_TEST GetRes(int i)
    {
        Thread.Sleep(i * 1000);
        return new T_TEST() { INT = i * 1000 };
    }

    private async Task<T_TEST> GetResAsync(int i)
    {
        return await Task.Run(() => GetRes(i));
    }

    public void GO()
    {
        for (int i = 0; i < 5; ++i)
        {
            Task<T_TEST> t_TEST = GetResAsync(i);
            DataDic.Add(i, t_TEST);
            t_TEST.ContinueWith(t =>
            {
                int idx = DataDic.First(pair => pair.Value == t).Key;
                Console.WriteLine($"第{idx}次延时{t.Result.INT}毫秒");
            });
        }
    }

    public void Wait()
    {
        List<Task<T_TEST>> tList = new List<Task<T_TEST>>();
        foreach (Task<T_TEST> t_TEST in DataDic.Values)
        {
            tList.Add(t_TEST);
        }
        Task.WaitAll(tList.ToArray());
        Console.WriteLine("已全部完成,全部结果遍历:");
        for (int i = 0; i < tList.Count; ++i)
        {
            Console.WriteLine($"第{i}次的 Result = {tList[i].Result.INT}");
        }
    }
}

public class T_TEST
{
    public int INT { get; set; }
}

主函数:

TAKS_TEST tAKS_TEST = new TAKS_TEST();
tAKS_TEST.GO();
Console.WriteLine("等待完成,统一打印结果:");
tAKS_TEST.Wait();

Console.ReadKey();

输出:

等待完成,统一打印结果:
第0次延时0毫秒
第1次延时1000毫秒
第2次延时2000毫秒
第3次延时3000毫秒
第4次延时4000毫秒
已全部完成,全部结果遍历:
第0次的 Result = 0
第1次的 Result = 1000
第2次的 Result = 2000
第3次的 Result = 3000
第4次的 Result = 4000