using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace winformLearning
{
public partial class Task学习 : Form
{
public Task学习()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//第一种方式
//Task task = new Task(() => {
// Thread.Sleep(5000);
// Console.WriteLine("66666");
//});
//Console.WriteLine(task.Status);
//task.Start();
//Console.WriteLine(task.Status);
//task.Wait();
//Console.WriteLine(task.Status);
//第二种方式
//string name = "张三";
//Task.Run(() => TastMethod(name));
//第三种方式 wait
//string name = "张三";
//Task task=Task.Factory.StartNew(() => TastMethod(name));
//task.Wait();//阻塞当前线程(主线程),直到task执行完毕,这会儿窗体会动不了
//waitAll------1
//string name = "张三";
//Task task1 = Task.Factory.StartNew(() => TastMethod1(name));
//Task task2 = Task.Factory.StartNew(() => TastMethod1(name));
//Task[] taskList={task1,task2};
//Task.WaitAll(taskList); //当前线程阻塞,但是task1,task2 两个同时在执行
//waitAll-------2
//string name1 = "张三";
//string name2 = "李四";
//Task task1 = Task.Factory.StartNew(() => TastMethod1(name1));
//Task task2 = Task.Factory.StartNew(() => TastMethod2(name2));
//Task[] taskList = { task1, task2 };
//Task.WaitAll(taskList); //当前线程阻塞,但是task1,task2 两个同时执行完毕后,才会执行下一步
//Console.WriteLine("执行完毕");
//waitAny
string name1 = "张三";
string name2 = "李四";
Task task1 = Task.Factory.StartNew(() => TastMethod1(name1));
Task task2 = Task.Factory.StartNew(() => TastMethod2(name2));
Task[] taskList = { task1, task2 };
Task.WaitAny(taskList); //当前线程阻塞,但是task1,task2 有一个执行完就会执行下一步(执行完毕),未完成的任务继续执行
Console.WriteLine("执行完毕");
//Task回调函数
//Task t = new Task(() => {
// Thread.Sleep(5000);
// Console.WriteLine("执行6666");
//});
//t.Start();
//Console.WriteLine("t.id="+t.Id);
//t.ContinueWith((task) => {//task 是回调值
// Console.WriteLine("执行结束");
// Console.WriteLine(task.Id);
//});
}
public void TastMethod1(string name) {
Thread.Sleep(6000);
Console.WriteLine("name:"+name);
}
public void TastMethod2(string name)
{
Thread.Sleep(3000);
Console.WriteLine("name:" + name);
}
}
}