Task异步多线程

不废话,直接贴上要实现的效果和代码...

【1】直接使用Lambda表达式是实现多线程:

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

namespace Task异步多线程
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主线程执行业务处理.");
            Task task1 = new Task(() =>
            {
                Console.WriteLine($"异步线程:使用System.Threading.Tasks.Task执行异步操作.");
                for (int i = 0; i < 10; i++)
                {
                    Thread.Sleep(500);
                    Console.WriteLine($"异步线程输出:{i}");
                }
            }
                            );
            Console.WriteLine("主线程处理其他任务");
            Console.WriteLine("sleep 3000");
            task1.Start();
            Thread.Sleep(1000);
            Console.ReadLine();
        }
    }
}

【2】使用Lambda表达式匿名方式实现异步:

 static void Main(string[] args)
        {
            Console.WriteLine("主线程执行业务处理.");
            ///利用匿名 lambda表达式实现异步线程
            (new Task(() =>
                {
                    Console.WriteLine($"异步线程:使用System.Threading.Tasks.Task执行异步操作.");
                    for (int i = 0; i < 10; i++)
                    {
                        Thread.Sleep(500);
                        Console.WriteLine($"异步线程输出:{i}");
                    }
                }
                                )).Start();

            Console.WriteLine("主线程处理其他任务");
            Console.WriteLine("sleep 3000");
            Thread.Sleep(1000);
            Console.ReadLine();
        }
    }

【3】异步线程创建函数封装方式(注意这种情况下,方法用static修饰,使得Main()函数能直接调用):

 static void Main(string[] args)
        {
            Console.WriteLine("主线程执行业务处理.");
           Task task1= AsyTask();
            Console.WriteLine("主线程处理其他任务");
            task1.Start();
            Console.WriteLine("sleep 3000");
            Thread.Sleep(1000);
            Console.ReadLine();
        }
        static Task AsyTask() {
            Task task= new Task(() =>
                    {
                        Console.WriteLine($"异步线程:使用System.Threading.Tasks.Task执行异步操作.");
                        for (int i = 0; i < 10; i++)
                        {
                            Thread.Sleep(500);
                            Console.WriteLine($"异步线程输出:{i}");
                        }
                    }
                                    );
            return task;
                   }

【4】在其他类中封装方法:

  class Program
    {
        static void Main(string[] args)
        {
            TaskSch taskSch = new TaskSch();
            Console.WriteLine("主线程执行业务处理.");
            Task task1 = taskSch.AsyTask(0,10,"一");//创建异步线程

            Console.WriteLine("主线程处理其他任务");
            task1.Start();//启动异步线程
            Console.WriteLine("sleep 3000");
            Thread.Sleep(1000);
            Console.ReadLine();
        }
    }
}
class TaskSch
{
    public Task AsyTask(int a, int b, string info)
    {           //创建任务
        Task task = new Task(() =>
        {
            Console.WriteLine($"异步线程{info}:使用System.Threading.Tasks.Task执行异步操作.");
            for (int i = 0; i < b; i++)
            {
                Thread.Sleep(500);
                Console.WriteLine($"异步线程{ info}:{ a + i}");
            }
        }
            );
        return task;
    }

运行结果:

【创作不易,如果您觉得对您的学习有那么一点点儿帮助,请点击页面侧边栏轻微打赏!】

posted @ 2023-11-03 14:56  Stephen_Young  阅读(32)  评论(0编辑  收藏  举报