码迷,mamicode.com
首页 > 编程语言 > 详细

.Net 多线程 (1) Task

时间:2017-12-27 18:00:34      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:nan   can   运行   tostring   log   aggregate   https   线程   access   

多线程是一种有效提高程序工作效率的方法。当然为了效率需要使用更多的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 方法。

技术分享图片 AsyncState

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

技术分享图片技术分享图片 CompletedTask

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

技术分享图片 CreationOptions

获取用于创建此任务的 TaskCreationOptions

技术分享图片技术分享图片 CurrentId

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

技术分享图片 Exception

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

技术分享图片技术分享图片 Factory

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

技术分享图片 Id

获取此 Task 实例的 ID。

技术分享图片 IsCanceled

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

技术分享图片 IsCompleted

获取此 Task 是否已完成。

技术分享图片 IsFaulted

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

技术分享图片 Status

获取此任务的 TaskStatus

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

 

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

.Net 多线程 (1) Task

标签:nan   can   运行   tostring   log   aggregate   https   线程   access   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!