readline

C#中关于Task.Yeild()的探究

老子叫甜甜 提交于 2020-08-20 08:11:22
在与同事讨论async/await内部实现的时候,突然想到Task.Yeild()这个函数,为什么呢,了解一点C#async/await内部机制的都知道,在await一个异步任务(函数)的时候,它会先判断该Task是否已经完成,如果已经完成,则继续执行下去,不会返回到调用方,原因是尽量避免线程切换,因为await后面部分的代码很可能是另一个不同的线程执行,而Task.Yeild()则可以强制回到调用方,或者说主动让出执行权,给其他Task执行的机会,可以把Task理解为协程,Task.Yeild()和Thread.sleep(0)有点相同。 为了证明我的结论成立,请看代码: 1 public static async Task Test1() 2 { 3 await Task.CompletedTask; 4 Thread.Sleep( 1000 ); 5 Console.WriteLine( " Test1任务完成 " ); 6 } 7 public static async Task Test2() 8 { 9 await Task.Delay( 1 ); 10 Thread.Sleep( 1000 ); 11 Console.WriteLine( " Test2任务完成 " ); 12 } 13 public static async Task Test3() 14 { 15

释译python fileinput中的description

此生再无相见时 提交于 2020-08-20 06:07:53
fileinput 模块提供处理一个或多个文本文件的功能 , 可以通过使用 for..in 来循环读取一个或多个文本文件内容 . 例子中的文件, 1.txt 1a 2a 3a 4a 2.txt 1b 2b DESCRIPTION Typical use is: import fileinput for line in fileinput.input(): process(line) This iterates over the lines of all files listed in sys.argv[1:], defaulting to sys.stdin if the list is empty. If a filename is '-' it is also replaced by sys.stdin. To specify an alternative list of filenames, pass it as the argument to input(). A single file name is also allowed. [ 译 ] 这个迭代了所有文件的行在 sys.argv[1:] 中,如果列表为空则默认为标准输入,如果文件名为 ”-” 它也为标准输入。指定一个文件名列表来做为参数传递给 input ,一个单独的文件名也是允许的。 [ 例 ] (1)#!/usr

C#线程同步

若如初见. 提交于 2020-08-20 05:15:50
原子操作类: public abstract class CounterBase { public abstract void Increase(); public abstract void Decrease(); }    public class CounterNoInterlocked : CounterBase { public int Count { get; private set; } public override void Decrease() { Count--; } public override void Increase() { Count++; } }    public class CounterWithInterlocked : CounterBase { private int _count; public int Count { get { return _count; } } public override void Decrease() { Interlocked.Decrement(ref _count); } public override void Increase() { Interlocked.Increment(ref _count); } }   Mutex类: static void Main(string[] args)

.NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)

偶尔善良 提交于 2020-08-19 22:06:09
阅读目录: 1.背景介绍 2.对业务功能点进行逻辑划分(如:A、B、C分别三个业务点) 2.1.配置映射关系,对业务点配置查询契约(构造VS插件方便生成查询契约) 2.2.将配置好的映射策略文件放在调用端,与服务不耦合 3.Dynamic、Dom动态构造服务端对象(Dynamic、DOM实现动态DOM) 1.背景介绍 现在越来越多的公司都在尝试SOA架构的实践,本人最近也在尝试学习这方面的技术,但是在实践过程中遇到一个问题,我想这个问题也是我们普遍实践者都应该会遇到的问题,问题描述如下: 我们有一个SOA商品(Item)查询接口,这个接口很通用,主要用来支撑日常很多其他系统的大量关于Item的查询,尤其是在高峰期间该服务的压力是很大的;我们站在SOA的角度看这个接口,这个通用的接口解决了众多的查询业务,确实不错,但是我们切换一下角度,站在每一个调用接口的访问端看似乎并不是很满意或者说牺牲了部分性能上的代价,因为我们无法干净利落的只获取当前这个业务点需要的数据项;这个Item 服务接口所返回的数据项必须同时满足所有调用它的业务点,哪怕这次调用我只需要用到Item的三分之一的数据字段都不行,每次都会把不需要的字段都查询出来,不管是返回的性能、查询的性能,其实都是可以通过调整设计来避免的; 以往我们的思路都是集中在服务端,常规做法都是提供了一个能够容纳所有查询客户端需求的数据实体

# Vue Axios Post 请求后端request.getParameterMap()拿不到值

余生颓废 提交于 2020-08-19 19:54:52
Vue Axios Post 请求后端request.getParameterMap()拿不到值 后端Form表单提交ConteentType类型 application/x- www-form-urlencoded 是 Post 请求默认的请求体内容类型,也是 form 表单默认的类型。 Servlet API 规范中对该类型的请求内容提供了 request.getParameter() 方法来获取请求参数值。 当请求类型不是Form表单提交的类型时候可以用下面方法取参数 VueAxios post 提交时候默认提交Json格式的,后端使用``````request.getParameter() 拿不到相应的参数值,可以使用 param = request.getReader().readLine();```这个方法拿到值,但是得到的是String 类型的参数,不好处理。就是如下图所示的问题。 还是处理一下 Vue axios 的提交方式,修改如下 export function requireData ( url , params , type , item ) { if ( ! url ) return false switch ( item ) { case 'back' : url = axios . defaults . baseM1URL + url break ;

如何用C#动态编译、执行代码

自闭症网瘾萝莉.ら 提交于 2020-08-19 16:14:42
  在开始之前,先熟悉几个类及部分属性、方法: CSharpCodeProvider 、 ICodeCompiler 、 CompilerParameters 、 CompilerResults 、 Assembly 。    一、CSharpCodeProvider     提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码,可以使用 VBCodeProvider 。      CreateCompiler() :获取编译器的实例。    二、ICodeCompiler     定义用于调用源代码编译的接口或使用指定编译器的 CodeDOM 树。每种编译方法都接受指示编译器的 CompilerParameters 对象,并返回指示编译结果的 CompilerResults 对象。      CompilerAssemblyFromSource(CompilerParameters option, string source) :使用指定的编译器,从包含源代码的字符串设置编译程序集。    三、CompilerParameters      表示用于调用编译器的参数。      ReferencedAssemblies :获取当前项目所引用的程序集。 Add 方法为程序集添加引用。      GenerateExecutable :获取或设置一个值

c#多线程总结(纯干货)

我们两清 提交于 2020-08-19 00:49:01
线程基础 创建线程 static void Main( string [] args) { Thread t = new Thread(PrintNumbers); t.Start(); // 线程开始执行 PrintNumbers(); Console.ReadKey(); } static void PrintNumbers() { Console.WriteLine( " Starting... " ); for ( int i = 1 ; i < 10 ; i++ ) { Console.WriteLine(i); } } View Code 暂停线程 class Program { static void Main( string [] args) { Thread t = new Thread(PrintNumbersWithDelay); t.Start(); PrintNumbers(); Console.ReadKey(); } static void PrintNumbers() { Console.WriteLine( " Starting... " ); for ( int i = 1 ; i < 10 ; i++ ) { Console.WriteLine(i); } } static void PrintNumbersWithDelay() {

Python之文件操作

做~自己de王妃 提交于 2020-08-18 14:45:38
Python可以对文件进行查看、创建等功能,可以对文件内容进行添加、修改、删除,且所使用到的函数在Python3.5.x为 open ,在Python2.7.x同时支持 file 和 open ,但是在3.5.x系列移除了 file 函数。 Python文件打开方式 文件句柄 = open('文件路径','打开模式') Ps: 文件句柄相当于于变量名,文件路径可以写为绝对路径也可以写为相对路径。 Python打开文件的模式 基本的模式 模式 说明 注意事项 r 只读模式 文件必须存在 w 只写模式 文件不存在则创建文件,文件存在则清空文件内容 x 只写模式 文件不可读,文件不存在则创建,存在则报错 a 追加模式 文件不存在创建文件,文件存在则在文件末尾添加内容 带 + 的模式 模式 说明 r+ 读写 w+ 写读 x+ 写读 a+ 写读 带 b 的模式 模式 说明 rb 二进制读模式 wb 二进制写模式 xb 二进制只写模式 ab 二进制追加模式 提示: 以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型 带 + 带 b 的模式 模式 说明 rb+ 二进制读写模式 wb+ 二进制读写模式 xb+ 二进制只写模式 ab+ 二进制读写模式 Python文件读取方式 模式 说明 read([size]) 读取文件全部内容,如果设置了size,那么久读取size字节

JAVA高级编程基础自学笔记---文件/IO流

心不动则不痛 提交于 2020-08-18 08:44:34
教学视频: https://edu.51cto.com/course/5667.html?source=so 目录 文件/IO流(文件操作流) 内存流(内存操作流使用不多) 打印流 System类对IO的支持(输出:system.out.print(),输入:system.in) IO高级应用(重点是Scanner的应用) 对象序列化(序列化与反序列化) 文件/IO流 IP操作类的核心五个类: 文件操作类:File 流操作类 :IntputStream、OutputStream、Reader、Writer 一个接口 : Serializable 一、File文件 File类是唯一一个与文件本身操作有关的类,即通过File可以实现文件的创建、删除、列表等操作; (一般只对文件操作,不能对文件内容操作) 例子:操作File File考虑路径的时候要注意,"\"要“\\”,如:e:\\这里要双斜杠 如: 这个要是放到linux下执行回报错,这是windows的分隔符 使用windows和linux下的操作通用写法加上:File.separator代表斜杠 问题二 必须存在目录后才可以创建文件; exists()这个方法是确认文件是否存在; mkdir这个方法是适合只有一个父类时,如:e:\\test.txt,如果该目录下存在多级文件夹,那么就用mkdirs方法,如:e:\\hello\

Linux 文件打开过多 (Too many open files)

放肆的年华 提交于 2020-08-18 07:20:17
如图是程序运行了一段时间后抛出来的一个bug, 刚开始看这个bug的时候各种网上找答案, 无外乎教你怎么改ulimit(就是linux最大打开文件数), 当然不是说改这个没有用, 作为程序开发者来说, 如果程序运行出现了bug则必然是程序的问题, 毕竟linux系统已经相当成熟, 它不会欺骗你(作为小菜鸟的我也是刚认识到这一点). 今天遇到的这种bug, 的确是程序上的原因. 具体什么原因, 下面开始我的表演. 我们知道linux中对于某个进程打开的文件句柄是有限制的, 这里的意识不是指简单new一个File对象.其实你new 一亿个文件对象放在那边, linux都不会来警告你. 这里的限制是我们new 了一个FIle, 并且使用了这个句柄搞事情. 如下面的代码 import org.testng.annotations.Test; import java.io.*; /** * Created by fire on 2018-03-02 14:45:02. */ public class File_new { @Test public void test1(){ File f1 = new File("G:/state/a.txt"); File f2 = new File("G:/state/b.txt"); File f3 = new File("G:/state/c.txt