• .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

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

  • 相关阅读:
    dynamic_debug和pr_debug()打印_高通平台
    Linux内核中的数据结构杂记
    Binder杂记
    内核中读写文件
    记一次阿里云ECS中Docker容器内无法连接RDS内网地址的故障解决
    mac上使用sips命令快速裁剪、旋转、翻转图片
    最新Android手机导出ANR、tombstones文件
    Android日期格式控制—— DateUtils
    addr2line的用法
    Spring-Cloud 学习笔记-(6)Feign
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/8022646.html
Copyright © 2020-2023  润新知