.Net 多线程 (1) Task

多线程是一种有效提高程序工作效率的方法。当然为了效率需要使用更多的cpu,内存等资源。

并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机,如果串行,一个队列使用一台咖啡机,那么哪怕前面那个人便秘了去厕所呆半天,后面的人也只能死等着他回来才能去接咖啡,这效率无疑是最低的。

并发和并行都可以是很多个线程,就看这些线程能不能同时被(多个)cpu执行,如果可以就说明是并行,而并发是多个线程被(一个)cpu 轮流切换着执行。

 运行一个线程

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             new Thread(Go).Start();  // .NET 1.0开始就有的
 6             Task.Factory.StartNew(Go); // .NET 4.0 引入了 TPL
 7             Task.Run(new Action(Go)); // .NET 4.5 新增了一个Run的方法
 8             Console.WriteLine("我是Main线程 {0}", Thread.CurrentThread.ManagedThreadId.ToString());
 9             var dayName = Task.Run<string>(() => { return GetDayOfThisWeek(); });
10             Console.WriteLine("今天是:{0}", dayName.Result);
11             Console.ReadLine();
12             
13         }
14         public static void Go()
15         {
16             Console.WriteLine("我是另一个线程 {0}", Thread.CurrentThread.ManagedThreadId.ToString());
17         }
18 
19         public static string GetDayOfThisWeek()
20         {
21             return string.Format("结果{0}", Thread.CurrentThread.ManagedThreadId.ToString());
22         }
23     }

TaskFactory 类

  • 创建一个任务,并通过调用立即启动该 StartNew 方法

任务等待

  • 创建一个任务,在数组中的任务之一通过调用完成后开始 ContinueWhenAny 方法。

  • 创建一个任务,在数组中的所有任务已都完成通过调用开始 ContinueWhenAll 方法。

System_CAPS_pubproperty AsyncState

获取在创建 Task 时提供的状态对象,如果未提供,则为 null。

System_CAPS_pubpropertySystem_CAPS_static CompletedTask

获取一个已成功完成的任务。

System_CAPS_pubproperty CreationOptions

获取用于创建此任务的 TaskCreationOptions

System_CAPS_pubpropertySystem_CAPS_static CurrentId

返回当前正在执行 Task 的 ID。

System_CAPS_pubproperty Exception

获取导致 AggregateException 提前结束的 Task。 如果 Task 成功完成或尚未引发任何异常,这将返回 null

System_CAPS_pubpropertySystem_CAPS_static Factory

提供对用于创建 Task 和 Task<TResult> 的工厂方法的访问。

System_CAPS_pubproperty Id

获取此 Task 实例的 ID。

System_CAPS_pubproperty IsCanceled

获取此 Task 实例是否由于被取消的原因而已完成执行。

System_CAPS_pubproperty IsCompleted

获取此 Task 是否已完成。

System_CAPS_pubproperty IsFaulted

获取 Task 是否由于未经处理异常的原因而完成。

System_CAPS_pubproperty Status

获取此任务的 TaskStatus

 https://msdn.microsoft.com/zh-cn/library/system.threading.tasks.task(v=vs.110).aspx

当然这里并不考虑对共享数据的操作,多个线程在对同一数据源进行操作的时候,不控制顺序可能会产生意想不到的后果。

原文地址:https://www.cnblogs.com/dreamtaker/p/8022646.html