C# IN Depth 第十五章、第十六章

第十五章 使用async/await进行异步编程

名词解释

调用方法:调用一个异步方法的方法,但是本身是同步的,阻塞的

异步方法:包含一个异步操作,可以被异步调用的方法。

异步操作:一个系统定义或自定义的异步方法。

异步方法和异步操作之间存在一种先有鸡还是先有蛋的问题,可以互相转化。而调用方法终结了这种转换。

边界:Task<TResult>,Task

思考异步编程

异步执行的基础

1.在异步操作开始时,返回一个token,可以用这个token在稍后提供后续操作

2.token表示正在进行的操作,这个操作在返回调用代码前可能已经完成,也可能正在处理

3.token表示的想法:在这个操作完成之前,不能进行下一步

4.token的形式通常为Task或者Task<Result>

5.C# 5异步执行流程

5.1执行某些操作

5.2开始异步操作,并记住返回的token

5.3可能会执行其他操作

5.4等待异步操作完成

5.5执行其他操作

语法和语义

1.async:声明异步方法时使用的修饰符。async在编译后在代码实际上是不存在的,它算是一种特性,帮助我们来生成异步代码

2.await:负责消费异步操作

声明异步方法

        public static async Task<int> FooAsync() { }
        public async static Task<int> FooAsync() { }
        async public Task<int> FooAsync() { }
        public async virtual Task<int> FooAsync() { }

异步方法的返回类型

1.void:表示完全没有返回任何信息

2.Task:没有返回值,但是存在返回信息,例如线程执行的情况如何

3.Task<TResult>:表示存在返回值,同样可以探查线程的执行情况

4.一般情况下,都应返回Task,除非是事件的订阅者

5.参数不应该使用out和ref,因为获取这个参数时,并不一定能获取到

可等待模式

1.await约束:

不能再catch,finally,非异步匿名函数,lock语句块或不安全代码找那个使用。保证线程安全

2.一般来说,只能等待一个异步操作。包含:

告知是否已经完成

如未完成可附加后续操作

获取结果,该结果可能无返回值,但至少可以指明成功或失败

await表达式的流

1.await后面有时是方法调用的结果,有时是属性

2.执行异步操作时,遇到需要获取异步操作的结果时,会判断异步操作是否已经结束,如果已经结束,则会使用该结果。如果未结束,则执行后续操作,当异步操作完成时,可以认为,会把结果自动的赋值给调用这个结果的地方。

3.直到遇到第一个await前,都是同步的

4.一个Task<T>就是计算机科学中的future,对未来生成的值或抛出的异常所作出的承诺

5.在等待任务时,任务出错或者取消都将抛出异常


第十六章 C# 5附加特性和结束语

1.foreach中捕获变量会会为每一个变量产生一个新实例,不会像闭包那样,共同引用一个元素。

2.for循环还是遵循闭包

3.调用者信息

CallerFilePath

CallerLinerNumber

CallerMemberName

都只能用于可选参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值