当前位置:首页 > Windows程序 > 正文

C#异步编程的实现方式(4)

2021-03-29 Windows程序

最基本的是知道怎么启动一个Task。

1、Task类构造函数

使用Task类的构造函数。实例化Task对象时,任务不会立即运行,而是指定Created状态。接着调用Task类的Start()方法来启动任务。使用Task类时,除了调用Start()方法,还可以调用RunSynchronously()方法。这样,,任务也会启动,但是同时调用。默认情况下,任务是异步运行的。

Task类的构造函数接收一个无参无返回值的委托:

1: Task task = new Task(TaskMethod);      2: task.Start();

下面是TaskMethod方法:

1: static void TaskMethod()      2: {      3: for (int i = 0; i < 10; i++)      4: {      5: Console.WriteLine(String.Format("Running in a task. Task ID: {0}", Task.CurrentId));      6: Thread.Sleep(500);      7: }      8: }

方法里用Task.CurrentId属性取得当前任务ID。下面是主线程:

1: static void Main(string[] args)      2: {      3: Task task = new Task(TaskMethod);      4: task.Start();      5:       6: for (int i = 0; i < 10; i++)      7: {      8: Console.WriteLine("Running in main thread.");      9: Thread.Sleep(500);      10: }      11:      12: Console.Read();      13: }

如果要往线程里传递参数,Task构造函数提供的重载,可以传入一个object类型的参数:

1: Task task = new Task(TaskMethodWithParameter, "Hello world");      2: task.Start();

下面是带参的线程方法:

1: static void TaskMethodWithParameter(object param)      2: {      3: for (int i = 0; i < 10; i++)      4: {      5: Console.WriteLine(String.Format("Running in a task. Parameter: {0}", param));      6: Thread.Sleep(500);      7: }      8: }

  

2、TaskFactory类

使用实例化的TaskFactory类,在其中把TaskMethod方法传递给StartNew()方法,就会立即启动任务。

1: TaskFactory tf = new TaskFactory();      2: tf.StartNew(TaskMethod);

  

3、Task.Factory属性

Task类提供了一个Factory静态属性,这个属性返回一个TaskFactory对象。

1: Task task = Task.Factory.StartNew(TaskMethod);

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69819.html