net 多线程学习 17 WhenAny WhenAll ContinueWith


using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace TaskContinue
{
    class Program
    {
        static void Main(string[] args)
        {
            Task task1 = new Task(() =>
            {
                System.Threading.Thread.Sleep(1000);

                Console.WriteLine("我是工作线程1:{0}", DateTime.Now);
            });

            task1.Start();

            Task task2 = new Task(() =>
            {
                System.Threading.Thread.Sleep(2000);

                Console.WriteLine("我是工作线程2:{0}", DateTime.Now);
            });

            task2.Start();

            //异步
            Task.WhenAny(task1, task2).ContinueWith(t =>
            {
                //执行“工作线程3”的内容
                Console.WriteLine("我是主线程 {0}", DateTime.Now);
            });

            //异步
            Task.WhenAll(task1, task2).ContinueWith(t =>
            {
                //执行“工作线程3”的内容
                Console.WriteLine("我是工作线程 {0}", DateTime.Now);
            });

            //等待task1,task2结束之后进行某项操作
            Task.WhenAll(task1, task2).ContinueWith((t) => { return "sdfa"; });

            //Task.Factory的Continue操作
            Task.Factory.ContinueWhenAll(new Task[2] { task1, task2 }, (t) =>
            {
                //执行“工作线程3”的内容
                Console.WriteLine("我是主线程 {0}", DateTime.Now);
            });


            Console.Read();
        }
    }
}


WhenAll 取得数组返回值


  Task<int> task1 = Task.Factory.StartNew(() =>
	{
			//做一些逻辑运算
			return 1;
	});

	Task<int> task2 = Task.Factory.StartNew(() =>
	{
			//做一些逻辑运算
			return 2;
	});

	var task = Task.WhenAll<int>(new Task<int>[2] { task1, task2 });

	var result = task.Result;

	Console.WriteLine(task2.Result);


作者:spike

分类: Net

创作时间:2023-06-25

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1