今天重温了下Task,之前学的都还给课本了~~~~~
简单的代码如下,需要再看
两个示例的结果是一样的,只是用的不一样,感觉第一个更符合我的思维吧。但是相比第二个更好玩些
class Program
{
static void Main(string[] args)
{
/////在Task调用了.Wait()或.WaitAll()时,就证明你要开始漫长的等待了~
///不调用的时候,Task自己执行,你这块可以写些其他的代码
/*Exp1: action */
//List
//Task[] tasks = new Task[3];
//Action
//});
//for (int time = 0; time <3; time++)
//{
// Task task = new Task(GetTestIndex, time);
// tasks[time] = task;
// task.Start();
// Console.WriteLine("开启任务了。。。。");
//}
//Console.WriteLine("开始等待了....");
//Task.WaitAll(tasks);
//Console.WriteLine("任务执行完成了.....");
//foreach (var l in lstr)
//{
// Console.WriteLine("打印结果:"+ l);
//}
/*exp2: asycn 与 await*/
List
Task
for (int i = 0; i < 5; i++)
{
tasks[i] = GetTask(i);
// tasks[i].Wait();
//tasks[i].Start(); //不能对已完成的任务调用 Start。
}
//获取最新完成的线程
List
int id = Task.CompletedTask.Id;
tasks.ToList().ForEach(x=> {
if (x.Id.Equals(id))
{
//刚完成的线程
Console.WriteLine("我是刚刚完成的线程+"+x.Result);
}
});
Console.WriteLine("、、、、其他的代码");
///其他代码 很好玩,每次的调用结果都是不同的。。异步
for (int i = 0;i<5;i++)
{
if (tasks[i].IsCompleted)
{
listRecord.Add(i);
Console.WriteLine("Hi,我执行完成了~"+i);
}
}
Console.WriteLine("开始等待线程的执行......");
Task.WaitAll(tasks);
Console.WriteLine("$##############等待等待完成.......");
tasks.ToList().ForEach(x=> {
Console.WriteLine(x.Result);
});
Console.WriteLine("执行完成....");
Console.ReadKey();
}
public static string GetTest(int index)
{
Console.WriteLine("执行我了..."+index.ToString());
Thread.Sleep(index);
return index.ToString();
}
//使用async 和await
protected static async Task
{
Console.WriteLine("哇塞开始执行了...." +index.ToString());
await Task.Run(()=> {
int i = 0;
while (i < 2000)
{
i++;
}
});
Console.WriteLine("等待线程的执行"+ index.ToString());
return "ok"+index.ToString();
}
}