首页 > 编程语言 >c# 异步 与 Link

c# 异步 与 Link

时间:2023-09-16 18:14:17浏览次数:42  
标签:异步 CancellationToken c# 示例 Codevar collection item Link


异步操作:

"异步"指的是代码执行不按照顺序进行,而是通过使用回调函数、Promise、async/await 等机制来实现非阻塞式的执行。在异步执行的情况下,代码不会等待前一段代码执行完成,而是继续执行后续的代码。当异步操作完成后,系统会通知代码进行相应的处理。   采用async / await 实现 c#执行执行异步操作 采用 状态机调用的方式

 

状态机调用:

  指的是通过状态机(State Machine)的方式来实现代码逻辑控制和状态管理的一种方法。 状态机是一种抽象模型,它可以描述一个系统或者对象的不同状态以及在这些状态之间的转换规则。在代码中使用状态机,通常涉及以下几个概念:
  1. 状态(State):表示系统或对象所处的特定状态。例如,一个订单可以有 "待支付"、"已支付"、"已发货" 等多个状态。
  2. 事件(Event):触发状态转换的事件。例如,订单可以有 "支付"、"发货" 等事件。
  3. 转换(Transition):描述状态之间的转换规则。当一个事件发生时,根据当前状态和事件,决定将系统或对象的状态从一个状态转换到另一个状态。
  4. 动作(Action):在状态转换过程中执行的具体操作。例如,当订单从 "待支付" 状态转换到 "已支付" 状态时,可能会触发发送支付成功通知的动作。
通过定义状态、事件、转换和动作等元素,可以构建一个完整的状态机。在代码中,可以使用条件语句、switch-case 语句、查表等方式来实现状态机的逻辑。 状态机调用的过程一般包括以下步骤:
  1. 定义状态机:定义系统或对象的所有可能状态、事件和转换规则,以及每个状态转换时需要执行的动作。
  2. 初始化状态:将系统或对象的初始状态设置为最初的状态。
  3. 接收事件:根据外部条件或用户操作,触发相应的事件。
  4. 处理事件:根据当前状态和接收到的事件,查找对应的转换规则,并执行相关的动作。
  5. 更新状态:根据转换规则确定的目标状态,将系统或对象的状态更新为新的状态。
  6. 重复步骤3-5,处理后续的事件,实现状态的连续转换和动态变化。
通过使用状态机调用,可以使代码逻辑更加清晰、可读性更好,并且易于扩展和维护。状态机在诸多领域都有广泛应用,例如游戏开发、工作流管理、设备控制等。  

优化异步:

减少调用线程   异步不等于多线程 Task.Run() 该方法会将异步方法放入新线程 标注 await和async 会返回数据本身 ,不会返回Task 但是不标注返回的是 Task 但是也是异步方法   async 方法效率略低,可能占用多线程资源,但是使用可以避免死锁等问题 如果某个异步方法只是转发其他异步方法,则不需要async   异步编程不要使用sleep()会阻塞线程,而是使用 await Task.Delay()  

Cancellation 参数 :

提前终止,请求超时,取消请求   CancellationToken 结构体是 .NET Framework 中用于取消异步操作的一种机制。它通常与 Task 和 async/await 等异步编程模式一起使用,用来优雅地处理异步操作的取消。 CancellationToken 结构体包含一个 CancellationTokenSource 对象和一个 CancellationToken 变量。CancellationTokenSource 对象用来创建 CancellationToken 对象,并设置一个 CancellationToken 取消标志位。当 CancellationTokenSource 对象的 Cancel 方法被调用时,就会将这个标志位设置为 true,从而通知异步方法或者线程需要取消任务的执行。 在异步操作中,可以通过传递一个 CancellationToken 对象给异步方法,以便在异步操作执行期间能够检查 CancellationToken 是否已经被取消。如果 CancellationToken 被取消,则异步方法应该尽快停止工作并返回结果,以便实现优雅的退出和资源回收。 CancellationToken 结构体还支持多个 CancellationToken 合并的功能。通过调用 CancellationToken.Register 方法,可以将 CancellationToken 注册到 CancellationTokenSource 对象上,从而将多个 CancellationToken 合并成一个,以便在任何一个 CancellationToken 被取消时,都可以触发异步任务的取消。 总之,CancellationToken 结构体是一个重要的异步编程工具,它提供了一种优雅、高效的机制来处理异步操作的取消,并且可以很好地和 Task、async/await 等异步编程模式结合使用,使代码更加健壮、可靠。     0   0   0    

yield return关键词:

yield return 是 C# 中的关键字组合,用于在迭代器(iterator)方法中生成一个序列。它提供了一种简洁的方式来实现按需生成数据序列的功能。 在一个带有 yield return 的方法中,可以使用 yield return来返回序列中的每个元素,并保留方法的当前状态。每次调用迭代器的 yield return方法时,都会执行 yield return 语句,并返回一个元素。然后,方法的执行会暂停直到下一次调用 yield return 方法。   异步 同步不要混用  

Link :

  1. from
:用于指定查询的数据源。它类似于 SQL 中的 FROM 子句,可以选择要查询的数据源,并将其赋值给一个范围变量。 示例:  Codevar query = from item in collection select item;
  1. where
:用于筛选符合条件的元素。它类似于 SQL 中的 WHERE 子句,通过提供一个条件表达式来指定筛选条件。 示例:  Codevar query = from item in collection where item.Property > 10 select item;
  1. select
:用于选择要在查询结果中返回的元素或属性。它类似于 SQL 中的 SELECT 关键字,可以从查询结果中选择特定的字段或生成新的投影结果。 示例: Codevar query = from item in collection where item.Property > 10 select item.Name;
  1. Where
:扩展方法形式的筛选操作符,用于筛选符合条件的元素。 示例:  Codevar query = collection.Where(item => item.Property > 10);
  1. Select
:扩展方法形式的投影操作符,用于选择要在查询结果中返回的元素或属性。 示例:  Codevar query = collection.Select(item => item.Name);
  1. OrderBy
:用于对查询结果进行升序排序。可以选择单个键或多个键进行排序。 示例:  Codevar query = from item in collection orderby item.Property ascending select item;
  1. GroupBy
:用于将查询结果分组。可以按照指定的键对结果进行分组,并生成一个序列的组。 示例:  Codevar query = from item in collection group item by item.Category into itemGroup select itemGroup;
  1. OrderByDescending
:与 OrderBy 类似,用于对查询结果进行降序排序。 示例:  Codevar query = from item in collection orderby item.Property descending select item;
  1. First
:用于获取查询结果中的第一个元素。如果查询结果为空,则会抛出异常。 示例:  Codevar firstItem = collection.First();
  1. FirstOrDefault
:与 First 类似,但如果查询结果为空,则返回默认值(例如 null)或指定的默认元素。 示例:  Codevar firstItem = collection.FirstOrDefault();
  1. Single
:用于获取查询结果中的唯一一个元素。如果查询结果为空或有多个元素,则会抛出异常。 示例:  Codevar singleItem = collection.Single();
  1. SingleOrDefault
:与 Single 类似,但如果查询结果为空或有多个元素,则返回默认值(例如 null)或指定的默认元素。 示例:  Codevar singleItem = collection.SingleOrDefault();
  1. Skip
:用于跳过查询结果中的指定数量的元素,并返回剩余的元素。 示例: Codevar query = collection.Skip(5);
  1. Take
:用于从查询结果中获取指定数量的元素。 示例:  Codevar query = collection.Take(10);
  1. Any
是 LINQ 查询中的一个操作符,用于检查序列中是否存在满足指定条件的元素。   Codevar numbers = new List<int> { 1, 2, 3, 4, 5 }; var anyGreaterThanTen = numbers.Any(num => num > 10); Console.WriteLine(anyGreaterThanTen); // 输出: False

标签:异步,CancellationToken,c#,示例,Codevar,collection,item,Link
From: https://www.cnblogs.com/alicia0/p/17707049.html

相关文章