CSharp
lionheart922
这个作者很懒,什么都没留下…
展开
-
C#多线程编成之Async,Await(三)可等待模式
await表达式的流 Task有一个方法: GetAwaiter() 此方法返回TaskAwaiter, 而TaskAwaiter实现了INotifyCompletion接口,从而实现了如下两个方法:GetResult()和OnCompletedpublic class Task<TResult> : Task{ ... public TaskAwai...原创 2019-08-26 17:48:29 · 499 阅读 · 0 评论 -
C# Lambda表达式和表达式树(一):从匿名函数到Lambda表达式的演化
作为委托的lambda表达式 从匿名函数到最简lambda表达式的演化 Func<string, int> returnLength = delegate(string text) { return text.Length; };//匿名函数 returnLength = (string text) => { return text.Lengt...原创 2019-09-04 17:30:39 · 213 阅读 · 0 评论 -
C#迭代器的实现(三)真实的迭代器示例
迭代时刻表中的日期 public class TimeTable { public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public IEnumerable<DateTime> DateRange ...原创 2019-09-03 15:54:13 · 202 阅读 · 0 评论 -
C#迭代器的实现(二)观察迭代器的工作流程
显示迭代器及其调用者之间的调用序列 public static readonly string Padding = new string(' ', 30); public static IEnumerable<int> CreateEnumerable() { Console.WriteLine("{0} Start o...原创 2019-09-02 18:12:46 · 152 阅读 · 0 评论 -
C#迭代器的实现(一)从1.0到2.0实现方法的不同
C# 1.0手写迭代器的痛苦 public class IterationSample : IEnumerable { object[] values; int startingPoint; public IterationSample(object[] values, int startingPoint) {...原创 2019-09-02 16:36:17 · 187 阅读 · 0 评论 -
C#多线程编成之Async,Await(五)异步匿名函数
创建异步匿名函数,Lambda表达式 Func<Task> lambda = async () => await Task.Delay(1000); Func<Task<int>> anonMethod = async delegate() { Console....原创 2019-08-27 16:35:03 · 1453 阅读 · 0 评论 -
C#多线程编成之Async,Await(四)异常
重新包装任务失败时产生的多个异常(《C# in depth page. 424〉) 捕获包含多个异常的AggregateException(《C# in depth page. 424〉) 以熟悉的方式处理异步异常 static async Task MainAsync() { Task<string> ...原创 2019-08-27 13:36:57 · 383 阅读 · 0 评论 -
C#多线程编成之Async,Await(一)
Async 标记一个方法为“不会阻塞的版本" 在执行时会瞬间返回一个任务 C#本身并不会为其启动新线程 几乎所有执行缓慢的方法都有Async的版本(.netframework自带) Async方法至少使用一次await关键字 Async方法一般返回Task Await Await后紧跟一个Task 同步的等待该任务完成,并获取到返回值 Await代码之后的代码仍然由原...原创 2019-08-21 10:01:07 · 372 阅读 · 0 评论 -
C#多线程编成之Async,Await(二)
异步执行的流程 执行某些操作 开始执行异步操作,并记住返回的token(通常为Task,或者Task<TResult>) 可能会执行其他操作,相当于在await之前再做一些其他的操作,一般不这么做。 等待异步操作完成(通过await token) 执行其他错作 完成 异步方法 static async Task<int> GetPageLen...原创 2019-08-23 18:58:47 · 321 阅读 · 0 评论 -
C# Lambda表达式和表达式树(二):表达式树
以编程方式构建表达式树 System.Linq.Expressions命名空间包含了代表表达式的各个类,它们都继承自Expression Expression类包含两个属性Type属性代表表达式求值后的.NET类型,可把它视为一个返回类型,例如,如果一个表达式要获取一个字符串的Length属性,该表达式的类型是int。 NodeType属性返回所代表的表达式的种类。它是Express...原创 2019-09-05 18:00:26 · 939 阅读 · 0 评论