c#中任务调度实例复习

我们在任务中启动一个新的任务,相当于新的任务是当前任务的子任务,两个任务异步执行,如果父任务执行完了但是子任务没有执行完,它的状态会设置为WaitingForChildrenToComplete,只有子任务也执行完了,父任务的状态就变成RunToCompletion

实例一:任务按序调用
using System;
using System.Diagnostics.Eventing.Reader;
using System.Threading;
using System.Threading.Tasks;
internal class Test
{
    private static void show()
    {
        Thread.Sleep(1000);
        Console.WriteLine("子线程开启");
        Console.WriteLine("子线程结束");
    }

    private static void show2(Task t)   //任务2
    {
        Thread.Sleep(2000);
        Console.WriteLine("xiancheng2zhixng");
    }

    public static void show3(Task t)   //任务3
    {
        Thread.Sleep(2000);
        Console.WriteLine("线程3结束");
    }

    public static void Main()
    {
        Task a = new Task(show);   //创建任务
        a.Start();
        Task t1 = a.ContinueWith(show2);    //任务继续调用
        t1.ContinueWith(show3);
        Console.WriteLine("主线程结束");
        Console.ReadKey();
    }
}


实例二:多线程对资源的调度
不加控制的情况
using System;
using System.Threading;

internal class House     
{
    private bool door = false;
    private int data = 5;
    public void  show()
    {
        data++;
        if (data ==5)
        {
            Console.WriteLine("门开了");
        }
        data = 5;
    }
}

internal class Test
{
    private static void tt(Object hou)    //线程函数
    {
        House mm = hou as House;
        while (true)
        {
            mm.show();
        }
       
    }

    public static void Main()
    {
        House hou=new House();
        Thread th1=new Thread(tt);   //创建两个线程对同一个对象的值操作
        th1.Start(hou);    //开启线程1
        Thread th2=new Thread(tt);
        th2.Start(hou);    //开启线程2

    }
}


实例三:对资源进行加锁
using System;
using System.Threading;

internal class House     
{
    private bool door = false;
    private int data = 5;
    public void  show()
    {
        data++;
        if (data ==5)
        {
            Console.WriteLine("门开了");
        }
        data = 5;
    }
}

internal class Test
{
    private static void tt(Object hou)    //线程函数
    {
        House mm = hou as House;
        while (true)
        {
            lock (mm)    //对mm进行加锁
            {
                mm.show();
            }   //释放锁
            
        }
       
    }

    public static void Main()
    {
        House hou=new House();
        Thread th1=new Thread(tt);   //创建两个线程对同一个对象的值操作
        th1.Start(hou);    //开启线程1
        Thread th2=new Thread(tt);
        th2.Start(hou);    //开启线程2

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值