C#任务Task应用详解

1、引用空间
System.Threading.Task
2、定义
Task类可以更好的控制并行操作,任务表示将完成的某个工作单元,该工作单元可以在单独的线程运行,可以以同步方式启动一个新任务。
3、启动任务的方式
任务处理程序
public static void TaskMethod(string o){
Console.WriteLine(“进入任务处理程序”+o);
}
(1)、使用实例化的TaskFactory类,在其中将TaskMethod方法传递给StartNew方法
var tf=new TaskFactory();
Task t1=tf.StartNew(TaskMethod, “using task factory”);
(2)、使用Task类的静态属性Factory来访问TaskFactory,以及调用StartNew方法
Task t2=Task.Factory.StartNew(TaskMethod, “factory via a task”);
(3)、用Task类的构造函数实例化Task对象,调用Task类的Start方法启动任务
Task t3=new Task(TaskMethod, “using a task constructor and start”);
t3.Start();
(4)、调用Task类的Run方法启动任务
Task t4=Task.Run(()=>TaskMethod(“using run method”));
Run方法没有可传递Action委托的重载版本,但通过传递Action类型的lambda表达式并在其实现中使用参数。
4、同步任务
private static void RunSynchronousTask(){
TaskMethod(“just the main thread”);
var t1=new Task(TaskMethod, “run sync”);
t1.RunSynchronously();
}
5、使用单独线程的任务
如果任务代码长时间运行,可使用TaskCreationOptions.LongRunning告诉任务调度器创建一个新线程。
var t1=new Task(TaskMethod,“long running”,TaskCreationOptions.LongRunning);
t1.Start();
6、任务结果返回
public static double TaskWithResult(object o){
List l=(List)o;
double d=0;
if(l[1]!=0){
d=l[0]/l[1];
}
return d;
}

public static void TaskWithResultDemo(){
var t1=new Task(TaskWithResult, l);
t1.Start();
Console.WriteLine(t1.Result);
}
7、连续任务
public static void TaskDoFirst(){
Console.WriteLine(“进入任务1处理程序”);
}
public static void TaskDoSecond(){
Console.WriteLine(“进入任务2处理程序”);
}
public static void ContinueTasks(){
Task t1=new Task(TaskDoFirst);
Task t2=t1.ContinueWith(TaskDoSecond);
Task t3=t1.ContinueWith(TaskDoSecond);
Task t4=t2.ContinueWith(TaskDoSecond, TaskContinuationOptions.OnlyOnFaulted);
t1.Start();
}
8、等待任务
WaitAll()方法阻塞调用任务,直到等待的所有任务完成为止;
WhenAll()返回一个任务,允许用async关键字等待结果,不会阻塞等待任务。
Task.Delay()方法指定从这个方法返回的任务完成前要等待的毫秒数。

你可能感兴趣的:(C#,c#,Task)