我们在任务中启动一个新的任务,相当于新的任务是当前任务的子任务,两个任务异步执行,如果父任务执行完了但是子任务没有执行完,它的状态会设置为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
}
}
c#中任务调度实例复习
最新推荐文章于 2024-08-01 07:34:54 发布