Simultaneidade multi-thread C# [fácil de entender e praticar]

Crie um tópico

Existem três maneiras de criar e executar tarefas: Pode receber parâmetros

 public void testTask(string[] args)
        {
    
    
            //1.new方式实例化一个Task,需要通过Start方法启动
            Task task = new Task(() =>
            {
    
    
                Thread.Sleep(100);
                Console.WriteLine($"hello, task1的线程ID为{
      
      Thread.CurrentThread.ManagedThreadId}");
            });
            task.Start();

            //2.Task.Factory.StartNew(Action action)创建和启动一个Task
            Task task2 = Task.Factory.StartNew(() =>
            {
    
    
                Thread.Sleep(100);
                Console.WriteLine($"hello, task2的线程ID为{
      
       Thread.CurrentThread.ManagedThreadId}");
            });

            //3.Task.Run(Action action)将任务放在线程池队列,返回并启动一个Task
            Task task3 = Task.Run<string>(() =>
            {
    
    
                Thread.Sleep(100);
              return $"hello, task3的线程ID为{
      
       Thread.CurrentThread.ManagedThreadId}";
            });
            Console.WriteLine("执行主线程!");
            Console.ReadKey();
        }

Método de bloqueio da tarefa (Wait/WaitAll/WaitAny)

task.Wait() significa aguardar a execução da tarefa e sua função é semelhante a thead.Join(); Task.WaitAll(Task[] tarefas) significa desbloquear somente após todas as tarefas terem sido executadas; Task.WaitAny( Task[]
tarefas ) significa que o bloqueio será liberado assim que uma tarefa for executada.

//阻塞主线程。task1,task2都执行完毕再执行主线程
            //执行【task1.Wait();task2.Wait();】可以实现相同功能
            Task.WaitAll(new Task[] {
    
     taskwait1, taskwait2 });

Após o uso, o thread atual é bloqueado e aguarda o término do thread usado.
 Se WaitAll for substituído por WaitAny, o bloqueio do thread será desbloqueado após a execução de qualquer tarefa. Qual é o resultado da execução?

Operação de continuação de tarefa (WhenAny/WhenAll/ContinueWith)

//task1,task2执行完了后执行后续操作
            Task.WhenAll(task, task2).ContinueWith((t) =>
            {
    
    
                Thread.Sleep(100);
                Console.WriteLine("执行后续操作完毕!");
            });

            //通过TaskFactroy实现   等待完成后执行后续的线程
            Task.Factory.ContinueWhenAll(new Task[] {
    
     task, task2 }, (t) =>
             {
    
    
                 Console.WriteLine($"hello, task ContinueWhenAll的线程ID为{
      
      Thread.CurrentThread.ManagedThreadId}");
             });

Cancelamento de tarefa (CancellationTokenSource) da tarefa

Acho que você gosta

Origin blog.csdn.net/qq_43886548/article/details/131105608
Recomendado
Clasificación