精华内容
下载资源
问答
  • 毫无疑问,一切数学发展在心理上都或多或少地基于实际,但是理论一旦在实际需要中出现,就不可避免地会使它自身获得发展动力,并超越直接实用的局限。这种从应用科学到理论科学发展趋势,不仅常见于古代...
  • 大家知道,菲氏微积分学教程完成于上世纪前半叶,而且在前苏联特定环境下完成,拒绝接受西方先进数学思想,有一定历史局限性。  与此相反,J.Keisler精心撰写无穷小微积分基于创建于上世纪后半叶...

        大家知道,菲氏微积分学教程完成于上世纪前半叶,而且是在前苏联的特定环境下完成的,拒绝接受西方的先进数学思想,有一定的历史局限性。

        与此相反,J.Keisler精心撰写的无穷小微积分是基于创建于上世纪后半叶的现代数学基础(公理化数学与模型论)之上的微积分学教程,与菲氏微积分相比,显然是两个不同时代的基础数学教材,培养下一代接班人,不得不考虑这个前提。

        口说无凭。下面是创建模型论早期的论文(部分),请注意论文发表时间,其中有不少塔尔斯基的学生。论文排序,按照作者氏字母顺序排列。


    袁萌 7月5日

    附:

    References(部分参考文献)

    [Ax68] J. Ax, Theelementary theory of ?nite ?elds. Ann. of Math. (2) 88 (1968), 239–271.

    [AK65] J. Ax andS. Kochen, Diophantine problems over local ?elds. I. Amer. J. Math. 87 (1965)605–630.

    [BS] J.L. Belland A.B. Slomson, Models and ultraproducts: An introduction. North-HollandPublishing Co., Amsterdam-London 1969

    [BCR] J.Bochnak,M. Coste and M.-F. Roy, Real algebraic geometry. Translated from the 1987French original. Revised by the authors. Ergebnisse der Mathematik und ihrerGrenzgebiete (3) ??

    [Results inMathematics and Related Areas (3)], 36. Springer-Verlag, Berlin, 1998.

    [BR66] A.R.Bernstein and A. Robinson, Solution of an invariant subspace problem of K. T.Smith and P. R. Halmos. Paci?c J. Math. 16 (1966) 421–431.

    [Bor69] A. Borel,Injective endomorphisms of algebraic varieties. Arch. Math. (Basel) 20 (1969),531–537.

    [CK90] C.C. Changand H.J. Keisler, Model theory. Third edition. Studies in Logic and theFoundations of Mathematics, 73. North-Holland Publishing Co., Amsterdam, 1990.

    [FT] P.L. Clark,Field Theory, lecture notes available at http://math.uga.edu/~pete/FieldTheory.pdf [GT] P.L. Clark, GeneralTopology, lectures notes available at http://math.uga.edu/~pete/expositions.html [Hod] W. Hodges, Ashorter model theory. Cambridge University Press, Cambridge, 1997.

    [Lam] T.Y. Lam,Introduction to quadratic forms over ?elds. Graduate Studies in Mathematics,67. American Mathematical Society, Providence, RI, 2005. [Lan52] S. Lang, Onquasi algebraic closure. Ann. of Math. (2) 55, (1952). 373–390.

    [Mar] D. Marker,Model theory. An introduction. Graduate Texts in Mathematics, 217.Springer-Verlag, New York, 2002.

    [Mat] Ju. V.Matijasevic, The Diophantineness of enumerable sets. (Russian) Dokl. Akad. NaukSSSR 191 1970 279–282.

    [Poi] B. Poizat,A course in model theory. (English summary) An introduction to contemporarymathematical logic. Translated from the French by Moses Klein and revised bythe author. Universitext. Springer-Verlag, New York, 2000.

    [ARob55] A.Robinson, On ordered ?elds and de?nite functions. Math. Ann. 130 (1955),275–271.

    [JRob49] J.Robinson, De?nability and decision problems in arithmetic. J. Symbolic Logic 14(1949), 98–114.

    [Rud] W. Rudin,Injective polynomial maps are automorphisms. Amer. Math. Monthly 102 (1995),no. 6, 540–543.

    [Ser09] J.-P.Serre, How to use ?nite ?elds for problems concerning in?nite ?elds.Arithmetic, geometry, cryptography and coding theory, 183–193, Contemp. Math.,487, Amer. Math. Soc., Provide……(省略)

    展开全文
  • APP垂直扁平化趋势,拐弯抹角去找应用有意思吗?  微信小程序不论性能还是用户体验都不及app...各种局限性决定了小程序只是鸡肋试验品,成不了大气候。  小程序位于微信一个犄角旮旯里,找半天才能进入目标应

         APP垂直扁平化是趋势,拐弯抹角去找应用有意思吗?

         微信小程序不论性能还是用户体验都不及app,何况跟微信绑定在一起,

    不但没增加用户选择自由度,相反加剧了更多限制,难道微信能成为世界主流吗,

    腾讯在五年后难道不走下坡路吗?小程序的诸多弊端和腾讯这家局域网公司的

    各种局限性决定了小程序只是鸡肋的试验品,成不了大气候。

        小程序位于微信的一个犄角旮旯里,找半天才能进入目标应用,这么烂的用户体验,

    至少我是觉得很不爽的,小程序不是公众号,公众号可以带来流量,因为其采用推送方式给用户资讯,用户相当于订了份报纸,给你的感觉依然是垂直体验。我欣赏微信平台相对自由的氛围,类似在BAT三家巨头中,腾讯算是干坏事最少的公司了,不论怎样,这是大环境造成的,也不能完全怪罪bat,只是像马云、李彦宏这样投机分子

    在国内占了不少,注定国内企业家背负令人发指的原罪。

        小程序并不能给你带来流量,也无法解决线下场景问题,对于线下的微流量,人们更愿意

    脱离网络而面对面接触,因为在虚拟世界呆久了,人们期待那一份真实。

        以我的手机使用经历来说吧,安装卸载app对我来说是很轻松随意的事情,我不觉得这会带来什么样的

    繁琐,而且我更喜欢在桌面直接点击进入应用,这样一步到位的APP是最节省时间的,而在微信某个角落

    去找所谓的小程序,是最浪费感情的。

        最后总结一句,已经占领APP高地的玩家千万不要转移战场到微信,那只是一个布满荆棘的陷阱。

    展开全文
  • 如下所述,它有其局限性,甚至可能会遇到一些设计问题。 如果您有任何疑问或建议,请随时或。 为什么要同步BatchNorm? 尽管在多个设备(GPU)上运行BatchNorm典型实现速度很快(没有通信开销),但不可避免地会
  • 对于性别,状态,可取值范围局限性非常大。对于上述SQL得到结果可能该表50% 数据(假设2中状态),这时候,添加B+树索引完全没有必要。相反,如果某个字段取值范围不固定,几乎没有重复,

    什么时候使用B+树索引

    • 并不是所有查询条件下出现的列都需要添加索引。对于什么时候添加索引,我们通过经验判断,访问表中很少一部分行时候,使用B+树索引才有意义。
    • 对于性别字段,地区字段,类型字段,他们取值范围很少,即选择性低。如下sql
    select * from moment where status = 1;
    
    • 对于性别,状态,可取值范围局限性非常大。对于上述SQL得到的结果可能是该表50% 的数据(假设2中状态),这时候,添加B+树索引完全没有必要。相反,如果某个字段取值范围不固定,几乎没有重复,即高选择性,此时使用B+树索引是最合适的,例如nickName 昵称字段,基本上一个应用中都不给你重复出现。
    • 如上,当访问选择性高的字段并从表中取出很少一部分行时候,对这个字段添加B+树索引是非常有必要的,但是如果出现了访问字段是高选择性的,但是取出的行数据占表中大部分数据时候,MySql数据库可能就不会使用B+树索引了,我们看如下一个案例。
    show index from New_UserBaseInfo;
    

    在这里插入图片描述

    • 表New_userBaseInfo大约有450W条数据。encodePhone字段上有一个索引,这时候,我们查找 ‘89F5F342F1ABE260F4F3D728174CF379’ 这个加密手机号时候,得到如下执行计划:
    explain select * from New_UserBaseInfo  where encodePhone = '89F5F342F1ABE260F4F3D728174CF379' 
    

    在这里插入图片描述

    • 可以看到 使用了idx_encodePhone这个索引,也符合我们前面提到的套选择性,选取表中很少行的原色,但是入座执行下面的这条语句:
    explain select * from New_UserBaseInfo  where encodePhone > '89F5F342F1ABE260F4F3D728174CF379' 
    

    在这里插入图片描述

    • 可以看到possible_keys依然是idx_encodePhone,但是实际上优化器使用的索引key是null, 而且type是ALL,说他他匹配到了对应的索引,但是他并没有使用索引去查下,还是全表查询。way???
    • 因为这不符合我们之前说的规则,虽然encodePhone 这个字段的值是高选择性,但是我们取出的行数据中占了表中的一大部分数据。可以看到rows显示的是44W+ 数据,包括99%的数据了。因此查询优化器并没有使用索引
    • 也许会有疑问,查找加密手机号大于 89F5F342F1ABE260F4F3D728174CF379 的字段,这种情况几乎不太可能出现。的确如此,但是我们考虑New_UserBaseInfo上 的lastRegisterTime 字段(注册时间),改字段日期类型,字段上有一个idx_lastRegisterTime 非唯一索引,看如下两条查询语句:
    explain select * from New_UserBaseInfo where lastRegisterTime < '2019-06-24';
    

    在这里插入图片描述

    explain select * from New_UserBaseInfo where lastRegisterTime < '2019-06-25';
    

    在这里插入图片描述

    • 查找用户注册时间小于某个时间的sql语句。前后两条SQL只相差1天时间,2条SQL语句的执行计划竟然不一样。在第二条SQL执行的时候,虽然同样使用的idx_lastRegisterTime索引,但是优化器却没有使用这个索引,而是对全表扫描。

    • MySQL数据库的查询优化器会通过explain的rows字段预估查询可能的到的行,如果大于某个值,则B+树会选择全表扫描。这个值大概是在20% 左右数据总量的时候会触发。即当我们取出的数据占比超过全数据量的20% 的时候,优化器不会使用索引,而是全表扫描。

    • 但是rows中预估的数据并不是绝对准确的,可以看大优化器判断日期小于2019-06-24 的数据是:757912,但是实际值:462377

    • 实际值少了大概38%,这可能对查询优化器的选择产生一定的影响,如果对比强制使用索引和使用优化器选择的全表扫描来查询注册日期小于2019-06-25的数据,最终发现如下:

     select * from New_UserBaseInfo force index(idx_lastRegisterTime)where lastRegisterTime < '2019-06-25';
     select * from New_UserBaseInfo where lastRegisterTime < '2019-06-25';
    
    • 查询时间分别是1.45s,5.8s,第一句SQL强制使用idx_lastRegisterTime 索引,所用的时间是4.15s,根据优化器选择的全表扫方式,执行第二SQL确5.8s,因此优化器的选择并不完全是正确的,有时候需要自己去判断。

    顺序读,随机读与预读取

    • 之前介绍的规则中,索引使用原则,高选择,取出表中少部分数据。但是为什么只能是少部分数据?这就和InnoDB的顺序读和随机读取有关系
      • 顺序读:是指定顺序的读取磁盘上的快(Block);随机读(Random Read)是指访问的快不是连续的,需要磁盘的磁头不断移动。当前传统机械磁盘的瓶颈之一就是随机读取的速度较低。
      • 在网上找的资料:同时对比RAID(磁盘阵列)开启write back 和write Through的性能差异。测试磁盘是由4块15000转的硬盘组成的RADI 10.测试文件大小2GB,块大小64KB。
      • Write-through:CPU向cache写入数据时,同时向memory(后端存储)也写一份,使cache和memory的数据保持一致
      • Write-back:cpu更新cache时,只是把更新的cache区标记一下,并不同步更新memory(后端存储)。只是在cache区要被新进入的数据取代时,才更新memory(后端存储)。
    write back write Through
    顺序读 193.76 65.333
    随机读 82.117 16.218
    • 可以看到,不管是否开启RAID卡的Write Back功能,磁盘的随机读性能都远远小于顺序读的性能。而上表中也说明了Write Back相对于Write Through 的性能提升。
    • 在数据库中,顺序读是指根据索引的叶节点数据就能顺序的读取所需要的行数据。这个顺序只是逻辑上的顺序读取,在物理磁盘上,行对应的数据可能还是随机分布在磁盘上的不同地址。但是相对来说,物理磁盘上的数据还是比较顺序的,因为B+树的构建是根据区来管理的,区是64个连续的页。如根据主键进行读取,或者通过辅助索引的叶节点就能读取到数据。
    • 随机读,一般指访问辅助索引叶节点不能完全得到的结果,需要根据辅助索引叶节点中的主键去找时机行数据。一般说来,辅助索引和主键所在的数据段是不同的,因此访问是随机的方式
    • 之前的sql lastRegisterTime < ‘2019-06-25’ 这条就是典型的随机读取。而正是因为读取的方式是随机的,并且随机读的性能会远低于顺序读取,因此优化器才会选择全表扫描的方式,而不是走 idx_lastRegisterTime 这个索引。
    预读取
    • InnoDB存储引擎为了提高读性能,引入了预读取技术。预读取是通过一次IO请求将多个页面预读取缓冲池中,并且估计预读取的多个页马上会被访问。传统的IO请求每次只读取一个页,在传统机械硬盘较低的IOPS下。预读取技术可以大大提高读取性能。

    • InnoDB有两个预读取的方法,随机预读取(Random read ahead)和线性预读取(linear read ahead)

      • 随机预读取:指定一个区(64个连续的页)中的13个页面也在缓冲区中,并且在LRU列表的前端(即页是被频繁访问),则InnoDB存储引擎会将这个区中神域的所有页预读到缓冲区。
      • 线性预读取基于缓冲池中的页的访问模式,而不是数量。如果一个区中的24个页都被顺序访问了,则InnoDB存储引擎会读取下一个区的所有页。
      • LRU页解析:Innodb为了加快对磁盘中数据的操作,在操作磁盘上的数据时,会先把数据存放到一块名为Buffer Pool的内存缓冲池中,但是内存的大小远小于磁盘的大小,因此需要一种机制来淘汰非热点数据,保证内存中存在的数据是较为频繁访问的数据。LRU是这种管理场景下最常用的算法,类似Redis中的LRU淘汰算法:
        • 新数据插入到链表头部;
        • 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
        • 当链表满的时候,将链表尾部的数据丢弃。
    • InnoDB1.0.4 开始,缩进访问的预读取被取消了,而线性预读取还是保留了,并且加入了innodb_read_ahead_threshold参数,改参数标识一个区中的多少个页面被顺序访问时候,InnoDB存储引擎才开启预读取,即预读下一个区中所有页。默认值是56,当一个区中56个页都被访问过,则预读下一个区的所有项。

    show VARIABLES like 'innodb_read_ahead_threshold'
    

    在这里插入图片描述

    • 固态硬盘的情况,固态硬盘没有读写磁头,读取不需要旋转,因此随机读取性能得到质的提高。因为固态硬盘现在并没有全面普及,所InnoDB存储引擎中没有见到对固态硬盘相关的一些优化。

    辅助索引的优化

    • 辅助索引的叶子节点包含主键,但是辅助索引的叶子节点不包含完整的行信息,因此,InnoDB存储引擎总是会先从辅助索引的叶节点判断是否能得到所需要的数据。用如下案例解释:
    drop table if EXISTS t
    
    create table t(a int not null, b varchar(20), PRIMARY key(a), key(b));
    
    insert into t select 1, 'k';
    
    insert into t select 2, 'do';
    
    insert into t select 3, 'dr';
    
    insert into t select 4, 'an';
    select * from t;
    
    • 如上我们插入的数据,我们执行如下查询语句:

    • 顺序如下:
      在这里插入图片描述

    • 加入我们插入的数据如下:

    
    insert into t select 1, 'a';
    
    insert into t select 2, 'b';
    
    insert into t select 3, 'c';
    
    insert into t select 4, 'd';
    select * from t;
    
    • 查询结果如下:
      在这里插入图片描述

    • 我们可以看到,他的排序规则是按照b的顺序排列的,并不是根据主键a的顺序排列,这也就是我们上面提到的,因为辅助索引中包含了主键的值,因此访问b列上的辅助索引就能得到a的值,这样就可以得到表中所有数据的值。 通常情况,一个辅助索引页中,能存放的数据比主键索引页上存放的数据多,因此优化器选择了辅助索引 ,如果我们解释这句查询语句得到如下结果:

    在这里插入图片描述

    • 可以看到,优化器最终选择b索引,如果想得到对列a的排序结果,还需要对他进行Order By 操作,这样优化器才会走主键,避免在查询b列后又发生对a的排序操作。如下图:
      在这里插入图片描述

    • 或者可以强制使用主键索引
      在这里插入图片描述

    联合索引

    • 联合索引是指对表上的多个列做索引。之前说的情况,都对表上的某个列进行索引。联合索引类似:
    alter table t add key idx_a_b(a,b);
    
    • 什么时候该使用联合索引?在这个问题之前我们应该弄清楚联合索引内部的结构,本质上,联合索引还是 B+树,不同的是联合索引的键值数量不是1个,二手大于等于2个。我们用简单的两个key的情况说明问题,如上a,b两个key,我们用如下图表示:

    在这里插入图片描述

    • 如上图中看到多个key情况的B+树,和我们之前讨论的单个键值没有什么区别,键值都是排序的,通过叶子节点可以逻辑上顺序的读出所有数据,就上面的例子来说:(1,1)(1,2)(2,1)(2,4)(3,1)(3,2)数据按照(a,b)的顺序存放。
    • 例如对于查询 select * from table where a= xxx and b = xxx,这种情况显然可以用(a,b)联合索引。对应单个a的查询 select * from table where a= xxx也可以使用(a,b)联合索引。但是对于select * from table where b= xxx单个b的查询不可以用这个B+树索引。可以看到叶子节点上b的值 1,2,1,4,1,2,显然不是按排序的,因此对于b列的查询使用不到(a,b)的联合索引。
    • 联合索引的第二个好处:可以对第二个键值进行排序,例如,很多情况,我们都只查询某个用户订单信息,并按照时间排序,取出最近一段时间的购买记录,这个时候使用联合索引可以避免多一次的排序操作。因为索引本身的叶子节点已经排序了。如下测试案例:
    
    create table buy_log(userid int unsigned not null, buy_date date);
    
    insert into buy_log values
    (1,'2021-01-19'),
    (2,'2021-01-19'),
    (3,'2021-01-19'),
    (1,'2021-02-19'),
    (3,'2021-02-19'),
    (1,'2021-03-19'),
    (1,'2021-04-19');
    
    ALTER table buy_log add key(userid);
    alter table buy_log add key(userid, buy_date);
    
    • 如上建立两个索引,都包含userid字段,对userid进行查询,看优化器的选择,如下:
      在这里插入图片描述

    • 如上,possible_keys中有两个索引,分别是单个userid和userid,buy_date的联合索引。优化选择的是userid,因为改叶节点包含单个键值,因此一个页能存放的记录更多,接着,看一下的查询,我们假定要取出userid= 1的最近三次购买记录,并分析使用单个索引和符合索引区别:
      在这里插入图片描述

    • 同样的都可以用两个索引,但是这次优化器选择了符合索引,因为这个联合索引中buy_date已经排序好了,如果我们强制使用userid的单个索引,会有如下结果:
      在这里插入图片描述

    • 如上extra信息中,看到Using filesort,filesort指排序,但是不是文件中完成,我们可以对比执行:

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    • 如上看到增加了排序操作,但是如果使用userid, buy_date的联合索引userid_2,就不会有这一次额外的操作,如下:

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    上一篇:数据结构与索引-- B+树索引

    展开全文
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.4 新64位机上64位类型是什么? 指针声明 1.5 这样声明有什么问题?char*p1,p2;我在使用p2时候报错了。 1.6 我想声明一个指针,并为它分配一些空间,但却不行。这样代码有什么问题?char*p;*p=...
  • Egret 童话 与 现实

    2021-01-03 14:33:25
    <p>7yue老师文章里第一个阐述问题就是 Egret 为什么选择 TypeScript ,总结一下有以下几点: <ol><li>TypeScript ES6 超集,将来ES6普及时,可以平滑过渡到ES6</li><li>TypeScript 弥补了...
  • 4. 指示知识上差距和可能存在的局限性 3 5. 说明论文目的及其贡献(ABSTRACT,INTRODUCTION) 4 6. 解释你所在领域关键术语 4 7. 解释你将如何在论文中使用术语和缩写 5 8. 给出论文结构,包括什么与不...
  • 1.4 新64位机上64位类型是什么? 3 指针声明 3 1.5 这样声明有什么问题?char *p1, p2; 我在使用p2时候报错了。 3 1.6 我想声明一个指针,并为它分配一些空间,但却不行。这样代码有什么问题?...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.4 新64位机上64位类型是什么? 3 指针声明 3 1.5 这样声明有什么问题?char *p1, p2; 我在使用p2时候报错了。 3 1.6 我想声明一个指针,并为它分配一些空间,但却不行。这样代码有什么问题?...
  • 线程创建并发底层工具,因此具有一定的局限性。 没有简单方法可以从联合(Join)线程得到“返回值”。因此必须创建一些共享域。当抛出一个异常时,捕捉和处理异常也麻烦。 线程完成之后,无法再次启动...
    1. 为什么要使用 Task
    2. Task 和 Thread 区别
    3. Task 介绍
    4. Task 简单实现
    5. Task 执行状态

    为什么要使用 Task

    线程是创建并发的底层工具,因此具有一定的局限性。

    • 没有简单的方法可以从联合(Join)线程得到“返回值”。因此必须创建一些共享域。当抛出一个异常时,捕捉和处理异常也是麻烦的。
    • 线程完成之后,无法再次启动该线程。相反,只能联合(Join)它(在进程阻塞当前线程)。

    任务是可组合的——使用延续将它们串联在一起。它们可以使用线程池减少启动延迟,而且它们可以通过TaskCompletionSource使用回调方法,避免多个线程同时等待I/O密集操作。

    Task 和 Thread 区别

    1、任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。

    2、任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线程池,但是任务相比线程池有很小的开销和精确的控制。

    Task和Thread一样,位于System.Threading命名空间下

     

    与线程相比,Task是一个更高级的抽象概念,它标识一个通过或不通过线程实现的并发操作。

    Task 介绍

    Task 类的表示单个操作不返回一个值,通常以异步方式执行。 Task 对象是一个的中心思想 基于任务的异步模式 首次引入.NET Framework 4 中。 因为由执行工作 Task 对象通常以异步方式执行在线程池线程上而不是以同步方式在主应用程序线程,您可以使用 Status 属性,以及 IsCanceled, ,IsCompleted, ,和 IsFaulted 属性,以确定任务的状态。 大多数情况下,lambda 表达式用于指定的任务是执行的工作。

    Task 简单实现

    通过使用Task的构造函数来创建任务,并调用Start方法来启动任务并执行异步操作。

    static void Main(string[] args)
    {
            Console.WriteLine("主线程执行业务处理.");
            //创建任务
            Task task = new Task(() => {
                Console.WriteLine("使用System.Threading.Tasks.Task执行异步操作.");
                for (int i = 0; i < 10; i++)
                {
                      Console.WriteLine(i);
                }
          });
         //启动任务,并安排到当前任务队列线程中执行任务
          task.Start();
          Console.WriteLine("主线程执行其他处理");
    }

     

    从Framework 4.5开始,启动一个由后台线程实现的Task,也可以使用静态方法 Task.Run

    Task task = Task.Run(() =>
        {
            Thread.Sleep(2000);
            Console.WriteLine("Foo");
        });

     

     

    Task默认使用线程池,它们都是后台线程。意味当主线程结束时,所有任务都会随之停止。

     

    Task 执行状态

    1.等待(Wait)

    调用Wait方法,可以阻塞任务,直至任务完成,效果等同于Thread.Join

        Task task = Task.Run(() =>
        {
            Thread.Sleep(2000);
            Console.WriteLine("Foo");
        });
        Console.WriteLine(task.IsCompleted); //False
        task.Wait();//阻塞,直至任务完成
        Console.WriteLine(task.IsCompleted); //True
        Console.ReadLine();

    2. 返回值

    Task<TResult>允许任务返回一个值。调用Task.Run,传入一个Func<TResult>代理(或者兼容的Lambda表达式),代替Action,就可以获得一个Task<TResult>:

    Task<int> task = Task.Run (() => { Console.WriteLine ("Foo"); return 3; });
    
    int result = task.Result;      // Blocks if not already finished
    Console.WriteLine (result);    // 3

     

    下面的例子创建一个任务,它使用LINQ就按前3百万个整数(从2开始)中的素数个数:

    Task<int> primeNumberTask = Task.Run(() =>
            Enumerable.Range(2, 3000000).Count(n => Enumerable.Range(2, (int)Math.Sqrt(n) - 1).All(i => n % i > 0)));
    
        Console.WriteLine("Task running...");
        Console.WriteLine("The answer is " + primeNumberTask.Result);

    这段代码会打印“Task running...”,然后几秒钟后打印216815。

     

    3. Task.Delay

    Task.DelayThread.Sleep的异步版本

    Task.Delay(5000).GetAwaiter().OnCompleted(()=>Console.WriteLine(42));

    或者

    Task.Delay(5000).ContinueWith(ant => Console.WriteLine(42));

     

     

    参考资料:

    https://www.jianshu.com/p/4444f2d77f3b

    https://www.cnblogs.com/pengstone/archive/2012/12/23/2830238.html

    转载于:https://www.cnblogs.com/ryanzheng/p/10963966.html

    展开全文
  • 线程 C ++线程库 它是什么? 首先,这是不适合std ::线程替代品。 相反,此库建立在标准线程库基础上,添加了一些缺失项目以及更高级别线程...Ubuntu的局限性 虽然此代码已在macOS和Ubuntu上进行了定期测
  • 扁平化设计五大原则

    2021-03-03 20:07:33
    他认为好设计不应当局限于某种设计风格,而需要更注重可用、有用。如果因为时尚缘故,那就顺其自然吧。但该趋势并不适合一切项目,所以不能强求所有应用都遵从这一风格。顾名思义,扁平化设计仅仅采用二维...
  • 答:自动化就是利用代码代替手工操作,并不大家想自动化无所不能,相反自动化局限性很强,做事很有限,但是我们为什么还要写自动化呢?这样来说吧,手动操作登录界面,重复操作几遍还行,但是要是100遍,1000...
  • ……一个民族天然才能和组织能力关键性的。 (德)法兰克福大学教授恩格斯 真正思考人,从自己错误中汲取知识要比从自己成就中汲取知识更多。 (美)约翰·杜威 众人受挫而退我偏不退,众人齐进我...
  • 第7章介绍的是Linux系统的开机和关机流程,以及如何设置Linux操作系统的开机启动管理程序LILO。第8章转向介绍如何对硬盘进行操作,讨论如何对硬盘进行管理、怎样建立分区以及设定硬盘的使用限额。第9章涉及到作为一...
  • linux管理员指南

    2009-12-30 11:20:05
    第7章介绍的是Linux系统的开机和关机流程,以及如何设置Linux操作系统的开机启动管理程序LILO。第8章转向介绍如何对硬盘进行操作,讨论如何对硬盘进行管理、怎样建立分区以及设定硬盘的使用限额。第9章涉及到作为一...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    对实际编程来说,理解您内存管理器能力与局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必须进行内存管理。本文将介绍手工、半手工以及自动内存管理实践基本概念。 追溯到在 Apple II 上进行...
  • 对实际编程来说,理解您内存管理器能力与局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必须进行内存管理。本文将介绍手工、半手工以及自动内存管理实践基本概念。 追溯到在 Apple II 上...
  • 第10章至第13章是高级篇,主要面向高级读者,高级dba通常要解决架构层面的问题,因此对于这部分读者来说,最重要的是要扩展眼界,能够掌握如何选择最合适的工具而不是最贵的工具。为了跳出单一产品的限制,本书选择...
  • IMETool 大大突破了热键设置局限性,可以实现 1092 种不同热键组合。这 IMETool 独一无二功能。 ⑶系统自带输入法管理功能没有从注册表删除输入法功能。 ⑷另外 IMETool 还支持丰富命令行参数和脚本,可以...
  • 一般说来 建立一个研究领域 指的是一种系统分析,或多或少地建立 其最基本的或基础的概念、其概念的一致、以及其概念的本性顺序或层次结构;这可以有助于 将其与其它人类知识 联系起来。但是在一个领域的历史上,...
  • IMETool 大大突破了热键设置局限性,可以实现 1092 种不同热键组合。这 IMETool 独一无二功能。 ⑶系统自带输入法管理功能没有从注册表删除输入法功能。 ⑷另外 IMETool 还支持丰富命令行参数和脚本,可以...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

局限性相反的是什么