你是否曾经与我一样不理解async,await与task.wait()或者task.Result的区别?
接下来,一个Demo让你看出他们之间的区别。
static void Main(string[] args) { Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:start"); Test(); //不等待 Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:end"); Console.Read(); } static Task<int> Sleep() { Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Sleep start"); Thread.Sleep(1000); Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Sleep end"); return Task.FromResult(100); } static Task<int> Test() { Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Test start"); var a=Task.Run(Sleep).Result;//由上一篇文章可知Run将会在线程池内调度执行 Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Test end"); return Task.FromResult(a); }
运行结果:
1:start
1:Test start
4:Sleep start
4:Sleep end
1:Test end
1:end
由此可以看出Task.Result会阻塞主线程。
static void Main(string[] args) { Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:start"); TestAsync();//不等待 Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:end"); Console.Read(); } static Task<int> Sleep() { Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Sleep start"); Thread.Sleep(1000); Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Sleep end"); return Task.FromResult(100); } static async Task<int> TestAsync() { Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Test start"); var a = await Task.Run(Sleep); Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Test end"); return a; }
运行结果:
1:start
1:Test start
4:Sleep start
1:end
4:Sleep end
4:Test end
async,await不会阻塞主线程
昨天微信群里抛出一个SQL问题,瞬间你一嘴我一嘴,好不热闹。起初我也是这么认为的,你是怎么认为的呢?然后,小姐姐又补充了上下文按照文氏图的思路,似乎leftjoin后不会增加但是小姐姐解释说,查询结果确实“诡异”的多出了184行,问题变的interesting大家都给出了自己的见解,有人开始追问小姐姐用的是什么数据库,小姐姐说是impala。大部分人认为B表的关联列有重复值,而小姐姐坚定的说没有重复值,但是包含NULL。正当大家激烈的讨论时,小姐姐说问题搞清楚了。有人说这是impala方言,真的是方言吗?我也不清楚,之前没关注过这种场景,因为一般关联列都是主键,而业务主表的主键一般不包含NULL。为了搞清楚这个问题,我就在MySQL8环境下测试了一下。假设成绩表数据是这样的:(2名学生的姓名缺失)学生信息表数据是这样的:(3名学生的姓名缺失)现在要获取每个学生所在的城市信息:结果居然真的比成绩表(左表)的行数多,为什么呢?因为左表关联列为NULL的行会与右表关联列为NULL的行去关联,条件就是NULL=NULL,所以由NULL产生的行数是左表NULL的行数m乘以右表NULL的行数n,总
GoogleAnalytics360在国内要如何购买呢?有两种方式,一种是直签,跟谷歌分析官方;一种是通过代理,GoogleAnalytics在国内的有几家代理公司。为了保证代理公司的持续经营,谷歌会转介绍客户给代理,确保代理商能够正常经营,这也是国内代理的主要业务来源,目前国内的代理商主要有这几家,你都可以到谷歌官方网站:https://marketingplatform.google.com/about/partners/find-a-partner查询的。国内主要由代理商提供服务,谷歌提供backup。市面只能有这几家代理公司提供服务,目前国内的代理公司普遍都不大,每家公司基本在五十人以下;价格都是一样的,15万美元,换算成RMB近百万,差别看团队和合同里面包含的服务,这15万美元是谷歌和代理公司对半分的节奏,也就是卖出一个,代理公司可以获得7.5万美元左右。规范一些的公司会采用招投标的形式,如果明确是GoogleAnalytics,那只有这几家在投标,如果是广告监测,行为分析工具,就不局限于GoogleAnalytics,那就有很多家会参加了,如神策、GrowingIO、Tal
有粉丝邮件求助,给了我两个vcf文件,旧的vcf文件走的是标准的bwa+gatk流程,参考基因组是hg19,新的文件参考基因组是hg38,也是gatk标准流程。想有比较它们,首先得保证两个vcf文件的参考基因组一致,因为版本不一致,所以需要使用CrossMap等软件进行参考基因组版本转换,然后里使用SnpSift软件的Concordance命令比较它们。如果简单看文件数量,当然是不行的。137352new.filter.sort.vcf 46976old.filter.sort.vcf 复制首先看看两个vcf文件的染色体分布情况catold.filter.sort.vcf|grep-v'^#'|cut-f1|sort|uniq-c>old.chr catnew.filter.sort.vcf|grep-v'^#'|cut-f1|sort|uniq-c>new.chr pastenew.chrold.chr 复制结果如下:14341chr14912chr1 6562chr102108chr10 7427chr112920chr11 74
代码示例packagecom.simple.util.io; importorg.apache.commons.io.IOUtils; importjava.io.IOException; importjava.io.InputStream; importjava.io.OutputStream; /** *@program:simple_tools *@description: *@author:Mr.chen *@create:2020-06-0910:00 **/ publicclassIOUtil{ /** * *@paramis *@return */ publicstaticStringioToString(InputStreamis){ try{ returnIOUtils.toString(is,"utf-8"); }catch(IOExceptione){ e.printStackTrace(); } return""; } /** * *@paramxml *@paramout */ publicstaticvoidw
关于Docsify官网地址:https://docsify.js.org/在Docsify官网对Docsify是这样的描述的,docsify是一个动态生成文档网站的工具。不同于GitBook、Hexo的地方是它不会生成将.md转成.html文件,所有转换工作都是在运行时进行使用官网推荐使用npm的方式去安装使用,但是如果不是公司级别的需求(文档需要统一管理),个人觉得没有必要去搭建一个项目去做这件事,就好像我写了一个接口,我更加希望在该项目中直接写好文档,然后可以直接看。所以这里我不介绍官网使用,而是介绍在SpringBoot项目如何使用Docsify生成文档。下面附上效果图:过程第一步:新建SpringBoot项目,记得勾选thymeleaf,如果有现成的。SpringBoot项目,引入下面依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </
什么是“上链”?什么数据和逻辑应该“上链”?文件能不能上链?链上能不能批量查数据?“链下”又是什么?交易“上链”的简要过程如下: 1,记账者们收录交易,按链式数据结构打包成“区块”。 2,共识算法驱动大家验证新区块里的交易,确保计算出一致的结果。 3,数据被广播到所有节点,稳妥存储下来,每个节点都会存储一个完整的数据副本。交易一旦“上链”,则意味着得到完整执行,达成了“分布式事务性”。简单地说,就像一段话经过集体核准后在公告板上公示于众,一字不错不少,永久可见且无法涂改。区块需要进行区块链共识,状态数据是通过执行区块中的交易生成的,这两类数据都直接或间接跟区块链共识有关系,可以将其称为“链上数据”。“上链”意味着“共识”和“存储”,两者缺一不可。交易不经过共识,则不能保证一致性和正确性,无法被链上所有参与者接受;共识后的数据不被多方存储,意味着数据有可能丢失或被单方篡改,更谈不上冗余可用。除此之外,如果仅仅是调用接口查询一下,没有改变任何链上数据,也不需要进行共识确认,则不算“上链”。Fabric联盟链的上链后可不可删除? 也不能,但是它有专门delstate接口,但是这个接口不是真的
目录0.编程环境1、下载并解压数据集2、完整代码3、数据准备4、数据观察4.1查看变量mnist的方法和属性4.2对比三个集合4.3mnist.train.images观察4.4查看手写数字图5、搭建神经网络6、变量初始化7、模型训练9、模型测试0.编程环境安装tensorflow命令:pipinstalltensorflow 操作系统:Win10 python版本:3.6 集成开发环境:jupyternotebook tensorflow版本:1.61、下载并解压数据集MNIST数据集下载链接:https://pan.baidu.com/s/1fPbgMqsEvk2WyM9hy5Em6w密码:wa9p 下载压缩文件MNIST_data.rar完成后,选择解压到当前文件夹,不要选择解压到MNIST_data。 文件夹结构如下图所示:2、完整代码此章给读者能够直接运行的完整代码,使读者有编程结果的感性认识。 如果下面一段代码运行成功,则说明安装tensorflow环境成功。 想要了解代码的具体实现细节,请阅读后面的章节。importwarnings warnings.filterwarn
为什么不再需要设置GOROOT呢?推荐读两篇英文文章,我意译了下,将它们放在了一篇里。第一篇是关于Go1.10之前,怎么设置GOROOT,发表与2013年。第二篇是从Go1.10开始,如何处理GOROOT,时间是2018年,Go源码提交日志。这篇非常短小。读完后,你会发现,大多数情况下,我们都不用手动设置GOROOT了。第一篇作者:DaveCheney|地址:you-dont-need-to-set-goroot-really一篇小短文,解释了为什么在编译和使用Go时,不需要设置GOROOT。概要性介绍一般来说,在Go1.0之后,编译和使用GO不再需要设置GOROOT。事实上,如果你的电脑上存在多个版本的Go语言环境,设置GOROOT可能产生一些问题。GOPATH仍然需要设置。从Go1.0开始,GOPATH就被强烈推荐。随着Go1.1的发布,GOPATH已经是强制性的了。为什么不再要设置GOROOT?谈些Go环境变量的历史吧!Go的资深老前辈们可能还记得,曾经的Go不仅要设置GOROOT,还需要设置GOOS和GOARCH。之所以要设置GOROOT,是因为Make在编译构建的时候,引入了
1简单用法 import threading i=0 def foo(): for i in range(10): i+=1 print i t1 = threading.Thread(target=foo) t2 = threading.Thread(target=foo) t1.start() t2.start()复制2锁 #创建锁 mutex=threading.Lock() #锁定 mutex.acquire([timeout]) #释放 mutex.release() 3event同步锁与线程类 event可以做为一个阻塞开关,阻塞时,如果另一边执行.set,就会释放阻塞。.clear函数可以恢复阻塞状态。 import threading import time import random #使用event同步,依次打印线程名,若不加event锁,则为乱序 #两个线程依次循环:阻塞--> 等待对方释放自己 -->执行打印 -->恢复自己的阻塞 --> 释放对方 class Mythread1
在IJCAI-2019期间举办的腾讯TAIC晚宴和BoothTalk中,来自TEG数据平台的张长旺向大家介绍了自己所在用户画像组的前沿科研结果: 1.非监督短文本层级分类; 2.大规模复杂网络挖掘和图表示学习。 其所在团队积极与学术界科研合作,并希望有梦想、爱学习的实力派加入,共同研究和应用半监督/弱监督/无监督学习、小样本学习、大规模复杂网络挖掘和图表示学习等做大数据挖掘。科研结果1:非监督短文本层级分类首先以下用户和AI算法的对话,显示了现实业务中使用现有监督文本分类算法的遇到的一些困境和问题:算法需要海量训练数据算法模型用户不可控算法不能很好的适应类目的变化我们分析现有监督算法的主要问题在于没有真正的知识,没有对于文本和类目的真正的理解。现有算法只是在学习大量人工标注训练样本里面的模式。为了解决这个问题,我们启动了一个叫做:基于关键词知识与类目知识的非监督短文本层级分类的探索项目。项目的主要思想是引入关键词和类目两种知识来帮助算法理解关键词和类目的含义。然后基于知识进行文本的分类和标注。关键词知识主要来自3个方面包括:关键词的网络搜索上下文、关键词的百科上下文、关键词到
这里是「国家队」栏目的第6期。在微信小程序的服务范围中,「政务民生」是一个不容忽视的大类。这预示着,未来只要用手机,就能处理大量公关事务,享受公共服务。目前,有哪些「国家队」小程序入场了呢?只要关注本栏目,每周都能获得一款优质推荐。小程序体验师:郭诺亚最近大热的反腐剧《人民的名义》看了吗?有没有被达康书记成功圈粉呢?在小鲜肉霸屏的时代,这部电视剧为什么能火?因为这部「史上尺度最大的反腐剧」能引起人们的共鸣。光躲在屏幕后面看剧,实在不够过瘾!如果有机会,你想亲自参与到现实中的反腐行动,认识真实世界的侯亮平吗?本期,知晓程序(微信号zxcx0101)推荐的「人民网地方领导留言板」小程序,就能让你与国内59位省委书记、省长,以及2000多位市委书记、市长、县委书记对话。这是真的吗?领导能看见我的留言吗?问题能得以解决吗?有图有真相。下图是人民网的官方统计。相比2015年,2016年无论是网民的留言,还是干部的回复,数量都呈大幅度增长,而且留言的领域涵盖了社会各方各面。无论你是想举报贪污腐败,还是在民生政务的问题上有所建议,都不妨来这儿留个言。如何使用呢?打开「人民网地方领导留言板」,底部是清
昨天项目上线了,上线之前老板提出一个要求,登陆密码不能设置过于简单的,不能输入连续的字符,没办法,加班改吧思路:1、正则:正则表达式不用说,百度一搜一大堆,别告诉我不会搜,这我可帮不了你,好吧还是帮帮你吧度娘的百度一下你就知道(只能帮到这里了,别的真帮不到你了)2、连续输入:我们怎么判断连续输入呢,连续输入也就是如下样式 111111qqqqqqZZZZZZ判断这个连续输入有两种办法,一在文本输入框的代理方法中TextFieldDelegate也就是下面那哥们-(BOOL)textField:(UITextField*)textFieldshouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString*)string 二自己计算字符串,也就是截取字符串,比较字符串,我们来说一下这个怎么截,怎么算我们先定义一个count 这个用于判断几个有几个相同的字符串了,然后我们开始截取字符串屁话不多说了,直接贴上代码吧注释已经很详细了,就不做过多的解释3、输入过于简单: 什么叫输入过于简单呢,我的理解就是什么 11111
1.接口描述接口请求域名:iotcloud.tencentcloudapi.com。 本接口(GetCOSURL)用于获取固件存储在COS的URL 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:GetCOSURL。 Version 是 String 公共参数,本接口取值:2021-04-08。 Region 是 String 公共参数,详见产品支持的地域列表。 ProductId 是 String 产品ID FirmwareVersion 是 String 固件版本 FileSize 否 Integer 固件版本大小 3.输出参数 参数名称 类型 描述 Url String 固件URL RequestI
性能问题 最近在跑flink社区1.15版本使用json_value函数时,发现其性能很差,通过jstack查看堆栈经常在执行以下堆栈 可以看到这里的逻辑是在等锁,查看jsonpath的LRUCache // //Sourcecoderecreatedfroma.classfilebyIntelliJIDEA //(poweredbyFernFlowerdecompiler) // packageorg.apache.flink.table.shaded.com.jayway.jsonpath.spi.cache; importjava.util.Deque; importjava.util.LinkedList; importjava.util.Map; importjava.util.concurrent.ConcurrentHashMap; importjava.util.concurrent.locks.ReentrantLock; importorg.apache.flink.table.shaded.com.jayway.jsonpath.JsonPath; pub
#6342.跳一跳 题目描述 现有一排方块,依次编号为 1…n1\ldotsn1…n。方块 111 上有一个小人,已知当小人在方块 iii 上时,下一秒它会等概率地到方块 iii(即不动),方块 i+1i+1i+1,方块 i+2i+2i+2……方块 nnn 上。求小人到达方块 nnn 所需要的期望时间(单位:秒)。 输入格式 一个数字 nnn。 输出格式 若答案 ans=ABans=\frac{A}{B}ans=BA 输出 A×B−1mod(109+7)。其中 B−1B^{-1}B−1 表示 Bmod(109+7) 下的逆元。 样例 样例输入1 1复制 样例输出1 0复制 样例输入2 10000000复制 样例输出2 406018741复制 数据范围与提示
在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(ConnectionlessPacketDeliveryService) 无连接交付抽象地表示大多数分组交换网络都能提供的一种服务。简单地讲,指的是TCP/IP灰暗网按照报文上携带的地址信息把短报文从一台机器传递到另一台机制。因为无连接服务单独传递每个分组,所以不能保证可靠、有序地传递。而且,由于无连接服务通常直接映射到底层的硬件上,所以非常有效。更重要的是,有了无连接分组交换作为互联网服务的基础,使得TCP/IP协议协议可以适应多种网络硬件。 可靠的数据流传输服务(ReliableStreamTransportService) 大多数应用程序要求得到比分组交换更多的服务,因为它们要求通信软件能够从传输错误、分组丢失或发送者与接受着之间路径上的交换机的故障中自动恢复过来。可靠的传输服务处理了这些问题。它允许一台计算机上的应用程序与另一台计算机上的应用程序之间建立一个"连接",然后通过该链接发送大量数据,就像这是一个永久的直接硬件
Underscore简介Underscore是一个JavaScript实用库,提供了类似Prototype.js的一些功能,但是没有继承任何JavaScript内置对象。它弥补了部分jQuery没有实现的功能,同时又是Backbone.js必不可少的部分。Underscore提供了80多个函数,包括常用的:map,select,invoke—当然还有更多专业的辅助函数,如:函数绑定,JavaScript模板功能,强类型相等测试,等等.在新的浏览器中,有许多函数如果浏览器本身直接支持,将会采用原生的,如forEach,map,reduce,filter,every,some和indexOf.个人感受Underscore是一个我坚持看完的js源代码,他简单、易懂、实用,细心观察就会发现,每个函数都很简短,作为开源阅读源码,我相信Underscore是不错的选择笔记1:大量的这种方法,应该是方式原始方法被篡改,同时加快运行速度,而言严格模式后,也不让通过arguments.callee调用相关方法的饿原因吧varArrayProto=Array.prototype, ObjProto=Obj
八一有话说:此文是我邀请了关坤同学来写本期的特殊函数,相信同学们看到标题就已经基本被吓到了,椭圆积分是什么玩意,平时考试、考研数学与高数竞赛中会出现椭圆积分?我告诉你,这不存在的,考到了你就完蛋了。 当晚上关同学将源码发给我的时候,其实我看了挺久的,因为我对椭圆积分也不熟练,很多定理与公式我都无法去说明,所以在阅读他发来的稿子过程中我又重新去看了一遍椭圆积分,也从中去修改了一部分错误,另外我又在源码中增加了椭圆积分的导数关系与级数表达式。在椭圆积分的应用中,他给出的例1,2较为简单形象地让大家对第一、二类不完全椭圆积分有了初步的运算,我后面增加了例3,4,相信很多同学们看到例3,卧槽,这不就是那个过去一个月天天在各大高数群传疯了的积分题,无初等函数,当今天你学完本次的椭圆积分,相信你再也不会怕这么菜爆了搞积题了。 本次内容分7个模板,从问题的提出、认识椭圆积分、椭圆的图像、性质以及椭圆的导数关系与级数表达式再到最后的椭圆积分应用,这就像一堂完整的课堂,但更像一场数学建模的较量,从问题的分析到模型的建立再到最后解决实际的问题,谢谢大家!本周数学建模国赛,预祝所有参赛同学取得
异常和错误 错误: 开发过程中难免出现错误,而错误分成两种 1、语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) 2、逻辑错误(逻辑错误) 异常: 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下: python中的异常种类: 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误 触发IndexError l=['egon','aa'] l[3]复制 触发KeyError dic={'name':'egon'} dic['age']复制 触发ValueError s='hello' int(s)复制 常用异常: AttributeError试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError输入/输出异常;基本上是无法打开文件 ImportError无法引入模块或包;基本上是路径问题或名称错误 IndentationE