当前位置:  开发笔记 > 编程语言 > 正文

任务==懒惰?

如何解决《任务==懒惰?》经验,为你挑选了2个好方法。

不,Lazy不一样Task.


Lazy是懒惰评估概念的实现:

    它表示T在第一次访问时同步计算的值,该值可能会也可能根本不会发生.

    评估在首次访问时发生,后续访问使用缓存值.记忆是一个密切相关的概念.

    第一次访问将阻塞以计算值,而后续访问将立即生成值.


Task与未来的概念有关.

    它表示在创建其承诺时T计算(通常是异步)的值,即使没有人最终实际访问它.

    所有访问都会产生一个缓存值,该缓存值已经或将要在之前或将来的时间由评估机制(承诺)计算.

    在计算值完成之前发生的任何访问都将阻塞,直到计算完成.在计算值完成后发生的任何访问将立即产生计算值.


所有这一切,LazyTask确实有一些你可能已经接受的共同点.

这些类型中每一种都是一元泛型类型,它描述了执行特定计算的唯一方法,该方法将产生一个T值(并且该计算可以方便地作为委托或lambda传递).换句话说,这些类型中的每一个都是monad的示例.您可以在Stack Overflow和其他地方找到一些非常好的简单解释monad的内容.



1> weston..:
相似

双方LazyTask承诺以后做了一些工作,并返回类型的结果T.

差异

Lazy 承诺如果需要的话尽可能晚地完成工作,并且同步进行.

Task 但是,当您的线程执行其他工作或阻止等待结果时,可以异步执行其工作.

Lazy当你打电话时,会冒出lambda引起的任何异常.Value.

Task将保留lambda引起的任何异常,并在以后抛出它await task.或者,如果你task.Wait()可以在包装该异常AggregationException.关于捕获任务引发的异常的更多信息,我向您推荐这个:捕获异步方法引发的异常,并查看此http://stiller.co.il/blog/2012/12/task-wait-vs-await/


是的,这是分析仪中真正应该修复的错误.当一次性用作任务时,它应该抑制警告.
还有另一种相似之处:在提供的代码中都没有意义.

2> Theodoros Ch..:

不,Lazy不一样Task.


Lazy是懒惰评估概念的实现:

    它表示T在第一次访问时同步计算的值,该值可能会也可能根本不会发生.

    评估在首次访问时发生,后续访问使用缓存值.记忆是一个密切相关的概念.

    第一次访问将阻塞以计算值,而后续访问将立即生成值.


Task与未来的概念有关.

    它表示在创建其承诺时T计算(通常是异步)的值,即使没有人最终实际访问它.

    所有访问都会产生一个缓存值,该缓存值已经或将要在之前或将来的时间由评估机制(承诺)计算.

    在计算值完成之前发生的任何访问都将阻塞,直到计算完成.在计算值完成后发生的任何访问将立即产生计算值.


所有这一切,LazyTask确实有一些你可能已经接受的共同点.

这些类型中每一种都是一元泛型类型,它描述了执行特定计算的唯一方法,该方法将产生一个T值(并且该计算可以方便地作为委托或lambda传递).换句话说,这些类型中的每一个都是monad的示例.您可以在Stack Overflow和其他地方找到一些非常好的简单解释monad的内容.


哦,这是一个monad好吧 - 或者更确切地说,是一个comonad.C#类型系统创建使用monad模式的类型没有问题.C#类型系统缺乏的概念是没有办法说"我想创建一个方法,其参数只是与monad模式匹配的泛型类型".
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有