5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task

原文: 5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task

有一点不太敢苟同:Task比线程池开销更小?

using System;
using System.Data.SqlClient;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            var task1 = new Task(() =>
            {
                Console.WriteLine("Hello,task");
            });
            task1.Start();

            var task2 = Task.Factory.StartNew(() =>
            {
                Console.WriteLine("Hello,task started by task factory");
            });

            var task3 = new Task(() =>
            {
                Console.WriteLine("Begin");
                System.Threading.Thread.Sleep(2000);
                Console.WriteLine("Finish");
            });
            Console.WriteLine("Before start:" + task3.Status);
            task3.Start();
            Console.WriteLine("After start:" + task3.Status);
            task3.Wait();
            Console.WriteLine("After Finish:" + task3.Status);

            var task5 = new Task(() =>
            {
                Console.WriteLine("Task 5 Begin");
                System.Threading.Thread.Sleep(2000);
                Console.WriteLine("Task 5 Finish");
            });
            var task6 = new Task(() =>
            {
                Console.WriteLine("Task 6 Begin");
                System.Threading.Thread.Sleep(3000);
                Console.WriteLine("Task 6 Finish");
            });

            task5.Start();
            task6.Start();
            Task.WaitAll(task5, task6);
            Console.WriteLine("All task finished!");

            var task7 = new Task(() => {
                Console.WriteLine("Task7 begin");
                Thread.Sleep(1000);
                Console.WriteLine("Task7 end");
            });
            task7.Start();
            var result = task7.ContinueWith<string>(_task7 =>
            {
                Console.WriteLine("task7 finished!");
                return "This is task7 result!";
            });
            Console.WriteLine(result.Result.ToString());

            var tokenSource = new CancellationTokenSource();
            var token = tokenSource.Token;
            var task = Task.Factory.StartNew(() =>
            {
                for (var i = 0; i < 1000; i++)
                {
                    System.Threading.Thread.Sleep(1000);
                    if (token.IsCancellationRequested)
                    {
                        Console.WriteLine("Abort mission success!");
                        return;
                    }
                }
            }, token);
            token.Register(() =>
            {
                Console.WriteLine("Canceled");
            });
            Console.WriteLine("Press enter to cancel task...");
            Console.ReadKey();
            tokenSource.Cancel();
            Console.ReadKey();
            Console.Read();
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值