page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6229 次

3096 个回答

0 赞同

python有哪些特性?

1、可解释 2、具有动态特性 3、面向对象 4、简明简单 5、开源 6、具有强大的社区支持

回答于 2021-09-09 14:49

0 赞同

请实现一个函数 Compose用于将多个函数复合?

publicstaticFunc<T1, T3>Compose<T1, T2, T3>(thisFunc<T1, T2> f1,Func<T2, T3> f2){return x => f2(f1(x));}然后使用方式:Func<int,double> log2 = x =>Math.Log2(x);Func<double,string> toString = x => x.ToString();var log2ToString = log2.Compose(toString);Conso...

回答于 2021-09-08 14:42

0 赞同

请简述 SelectMany的作用

相当于 js中数组的 flatMap,意思是将序列中的每一条数据,转换为0到多条数据。 SelectMany可以实现过滤/ .Where,方法如下: publicstaticIEnumerable<T>MyWhere<T>(thisIEnumerable<T> seq,Func<T,bool> predicate){return seq.SelectMany(x => predicate(x)?new[]{ x }:Enumerable.Empty...

回答于 2021-09-08 14:42

0 赞同

简述 stackless coroutine和 stackful coroutine的区别,并指出...

stackless和 stackful对应的是协程中栈的内存, stackless表示栈内存位置不固定,而 stackful则需要分配一个固定的栈内存。 在 继续执行( Continuation/ MoveNext())时, stackless需要编译器生成代码,如闭包,来自定义 继续执行逻辑;而 stackful则直接从原栈的位置 继续执行。 性能方面, stackful的中断返回需...

回答于 2021-09-08 14:41

0 赞同

利用 IEnumerable<T>实现斐波那契数列生成?

IEnumerable&lt;int&gt;GenerateFibonacci(int n){if(n &gt;=1)yieldreturn1;int a =1, b =0;for(int i =2; i &lt;= n;++i){int t = b; b = a; a += t;yieldreturn a;}}

回答于 2021-09-08 14:40

0 赞同

简述 yield的作用?

yield需配合 IEnumerable&lt;T&gt;一起使用,能在一个函数中支持多次(不是多个)返回,其本质和 async/await一样,也是状态机。 如果不使用 yield,需实现 IEnumerable&lt;T&gt;,它只暴露了 GetEnumerator&lt;T&gt;,这样确保 yield是可重入的,比较符合人的习惯。 注意,其它的语言,如 C++/ Java/ ES6实现的 yield,...

回答于 2021-09-08 14:39

0 赞同

Task和 Thread有区别吗?如果有请简述区别?

Task和 Thread都能创建用多线程的方式执行代码,但它们有较大的区别。 Task较新,发布于 .NET4.5,能结合新的 async/await代码模型写代码,它不止能创建新线程,还能使用线程池(默认)、单线程等方式编程,在 UI编程领域, Task还能自动返回 UI线程上下文,还提供了许多便利 API以管理多个 Task

回答于 2021-09-08 14:39

0 赞同

请简述 await的作用和原理,并说明和 GetResult()有什么区别

从状态机的角度出发, await的本质是调用 Task.GetAwaiter()的 UnsafeOnCompleted(Action)回调,并指定下一个状态号。 从多线程的角度出发,如果 await的 Task需要在新的线程上执行,该状态机的 MoveNext()方法会立即返回,此时,主线程被释放出来了,然后在 UnsafeOnCompleted回调的 action指定的线程上下文中继续 MoveNe...

回答于 2021-09-08 14:39

0 赞同

请简述 Task状态机的实现和工作机制?

CPS全称是 ContinuationPassingStyle,在 .NET中,它会自动编译为: 将所有引用的局部变量做成闭包,放到一个隐藏的 状态机的类中; 将所有的 await展开成一个状态号,有几个 await就有几个状态号; 每次执行完一个状态,都重复回调 状态机的 MoveNext方法,同时指定下一个状态号; MoveNext方法还需处理线程和异常等问...

回答于 2021-09-08 14:35

0 赞同

请简述 async函数的编译方式?

async/ await是 C# 5.0推出的异步代码编程模型,其本质是编译为状态机。只要函数前带上 async,就会将函数转换为状态机。

回答于 2021-09-08 14:35