C#

C#:Task多线程

Posted by Kaka Blog on December 11, 2018

前言

实现方法的异步操作,掌握Task的基本用法。

实体类

class Student
{
    public string name { get; set; }
    public int age { get; set; }
}

方法

方法一:修改Student对象的name值,并返回success,用时2s。

public static String MyMethod(Student str)
{
    str.name += " MyMethod";
    Thread.Sleep(2000);
    return "success";
}

方法二:给Student对象的age赋值,用时2s。

public static void MyMethod2(Student str)
{
    str.age = 20;
    Thread.Sleep(2000);
}

使用Task

public static void AsyncMethod2(Student str)
{
    Console.WriteLine("开始异步代码" + DateTime.Now);
    List<Task> tasks = new List<Task>();
    Task<String> t1 = Task.Run(() => MyMethod(str));
    Task t2 = Task.Run(() => MyMethod2(str));
    tasks.Add(t1);
    tasks.Add(t2);
    // 等待两个线程都完成
    Task.WaitAll(tasks.ToArray());
    // 获取返回值
    Console.WriteLine(t1.Result);
    Console.WriteLine("异步代码结束" + DateTime.Now);
}

测试

static void Main(string[] args)
{
    Console.WriteLine("主线程开始" + DateTime.Now);
    Student s = new Student();
    s.name = "小明";
    AsyncMethod2(s);
    Thread.Sleep(1000);
    Console.WriteLine("主线程结束" + DateTime.Now + s.name + s.age);
    Console.ReadLine();
}

结果:

主线程开始2018/12/11 14:05:40
开始异步代码2018/12/11 14:05:40
success
异步代码结束2018/12/11 14:05:42
主线程结束2018/12/11 14:05:43小明 MyMethod20

分析:两个方法各用时2s,使用多线程后2s就都完成操作,加上主线程的1s,总用时3s。达到多线程的效果。