使用Task.WaitAll()处理等待的任务?

德雷赫

理想情况下,我想做的是以非阻塞模式延迟任务,然后等待所有任务完成。我试图添加Task.Delay返回的任务对象,然后使用Task.WaitAll,但这似乎无济于事。我应该如何解决这个问题?

class Program
{
    public static async void Foo(int num)
    {
        Console.WriteLine("Thread {0} - Start {1}", Thread.CurrentThread.ManagedThreadId, num);

        var newTask = Task.Delay(1000);
        TaskList.Add(newTask);
        await newTask;

        Console.WriteLine("Thread {0} - End {1}", Thread.CurrentThread.ManagedThreadId, num);
    }

    public static List<Task> TaskList = new List<Task>();

    public static void Main(string[] args)
    {
        for (int i = 0; i < 3; i++)
        {
            int idx = i;
            TaskList.Add(Task.Factory.StartNew(() => Foo(idx)));
        }

        Task.WaitAll(TaskList.ToArray());
    }
}
鼻塞

这是您要达到的目标吗?

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    class Program
    {
        public static async Task Foo(int num)
        {
            Console.WriteLine("Thread {0} - Start {1}", Thread.CurrentThread.ManagedThreadId, num);

            await Task.Delay(1000);

            Console.WriteLine("Thread {0} - End {1}", Thread.CurrentThread.ManagedThreadId, num);
        }

        public static List<Task> TaskList = new List<Task>();

        public static void Main(string[] args)
        {
            for (int i = 0; i < 3; i++)
            {
                int idx = i;
                TaskList.Add(Foo(idx));
            }

            Task.WaitAll(TaskList.ToArray());
            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
        }
    }
}

输出:

线程10-开始0
线程10-开始1
线程10-开始2
线程6-结束0
线程6-结束2
线程6-结束1
按Enter退出...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

任务等待vs Task.WaitAll

来自分类Dev

任务等待vs Task.WaitAll

来自分类Dev

处理Task.WaitAll中已取消的任务和任务异常?

来自分类Dev

C#Task.WaitAll不在等待

来自分类Dev

Task.WaitAll没有在等待-解释

来自分类Dev

使用Task.Start触发任务时卡在Task.WaitAll(tasks.ToArray())

来自分类Dev

使用等待处理任务中的 C# 异常

来自分类Dev

在使用Task.Run()创建的任务上调用等待

来自分类Dev

在使用Task.Run()创建的任务上调用等待

来自分类Dev

等待Task.WhenAll(tasks)异常处理,记录任务中的所有异常

来自分类Dev

使用任务和WaitAll进行递归

来自分类Dev

使用任务和WaitAll进行递归

来自分类Dev

C#中的Task.WaitAll挂起了任务的执行

来自分类Dev

C#中的Task.WaitAll挂起了任务的执行

来自分类Dev

在WCF方法中使用Task.WaitAll

来自分类Dev

C#Task.WaitAll()取消,进行错误处理

来自分类Dev

等待新的Task <T>(...):任务不运行?

来自分类Dev

Task <TResult> .Result vs等待任务

来自分类Dev

Task.Wait()不等待任务完成

来自分类Dev

延续任务上的Task.WaitAll()仅延迟原始任务的执行?

来自分类Dev

如果在任务链上等待的任务具有“已解包”任务,则Task.Result / wait(..)无限期等待,而如果使用“异步/等待”,则成功完成

来自分类Dev

等待Task.WhenAll不等待所有任务完成

来自分类Dev

Task.ContinueWith()父任务不等待子任务完成

来自分类Dev

I / O绑定任务的Parallel.ForEach比Task.WaitAll快吗?

来自分类Dev

传递给 Task.WaitAll() 的任务会在不同的上下文中运行吗?

来自分类Dev

使用任务并行库Task.WhenAny()时如何处理异常

来自分类Dev

无需等待的任务异常处理

来自分类常见问题

等待与task.Result相同的已完成任务?

来自分类Dev

任务返回值,不带Task <T>(异步/等待模式)

Related 相关文章

  1. 1

    任务等待vs Task.WaitAll

  2. 2

    任务等待vs Task.WaitAll

  3. 3

    处理Task.WaitAll中已取消的任务和任务异常?

  4. 4

    C#Task.WaitAll不在等待

  5. 5

    Task.WaitAll没有在等待-解释

  6. 6

    使用Task.Start触发任务时卡在Task.WaitAll(tasks.ToArray())

  7. 7

    使用等待处理任务中的 C# 异常

  8. 8

    在使用Task.Run()创建的任务上调用等待

  9. 9

    在使用Task.Run()创建的任务上调用等待

  10. 10

    等待Task.WhenAll(tasks)异常处理,记录任务中的所有异常

  11. 11

    使用任务和WaitAll进行递归

  12. 12

    使用任务和WaitAll进行递归

  13. 13

    C#中的Task.WaitAll挂起了任务的执行

  14. 14

    C#中的Task.WaitAll挂起了任务的执行

  15. 15

    在WCF方法中使用Task.WaitAll

  16. 16

    C#Task.WaitAll()取消,进行错误处理

  17. 17

    等待新的Task <T>(...):任务不运行?

  18. 18

    Task <TResult> .Result vs等待任务

  19. 19

    Task.Wait()不等待任务完成

  20. 20

    延续任务上的Task.WaitAll()仅延迟原始任务的执行?

  21. 21

    如果在任务链上等待的任务具有“已解包”任务,则Task.Result / wait(..)无限期等待,而如果使用“异步/等待”,则成功完成

  22. 22

    等待Task.WhenAll不等待所有任务完成

  23. 23

    Task.ContinueWith()父任务不等待子任务完成

  24. 24

    I / O绑定任务的Parallel.ForEach比Task.WaitAll快吗?

  25. 25

    传递给 Task.WaitAll() 的任务会在不同的上下文中运行吗?

  26. 26

    使用任务并行库Task.WhenAny()时如何处理异常

  27. 27

    无需等待的任务异常处理

  28. 28

    等待与task.Result相同的已完成任务?

  29. 29

    任务返回值,不带Task <T>(异步/等待模式)

热门标签

归档