async

AwaitAsync(异步和多线程)

大兔子大兔子 提交于 2019-11-30 04:32:54
原文: AwaitAsync(异步和多线程) 参考了一些大佬写的文章: https://www.cnblogs.com/yilezhu/p/10555849.html 这个大佬写的文章,我还是很喜欢的 https://www.cnblogs.com/mushroom/p/4575417.html https://blog.csdn.net/dyllove98/article/details/9735955 这篇文章是讨论在.NET中使用进程内COM组件时的公寓模型,以一个示例直观演示STAThread和MTAThread的作用和区别。 C#5.0,.NET Framework4.5 async/await是语法糖,本身就跟编译器提供的功能。 在winform中,是一个STAThread 在winform中使用await/async偶尔会出现一些意外,所以不建议在winform中使用await/async   await/async关键字,在任何一个方法都可以增加async,await放在Task前面,一般成对出现,只有async是没有意义的,有警告,只有await的时候会报错,编译直接报错,await/async要么不用,要么用到底。     主线程调用async/await方法,主线程遇到await返回只能后续动作,await后面的代码会等着task任务完成后再继续执行

flutter 权限申请

守給你的承諾、 提交于 2019-11-30 03:32:37
添加依赖 permission_handler: ^3.2.2 androidmanifest.xml添加对应的用户权限 在flutter 中app入口申请权限: import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:permission_handler/permission_handler.dart'; import 'users.dart'; Future main() async { if (!await _requestPermissions()) { await AppUtils.popApp(); } else { runApp(new MyApp()); } } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { final appTitle = "flutter demo"; return new MaterialApp( title: appTitle, home: new JobPage(), ); } } Future<bool> _requestPermissions() async { Map

秒杀 tj/co 的 hprose 协程库

妖精的绣舞 提交于 2019-11-30 01:13:07
tj/co 有以下几个方面的问题: 首先, tj/co 库中的 yield 只支持 thunk 函数,生成器函数,promise 对象,以及数组和对象,但是不支持普通的基本类型的数据,比如 null , 数字,字符串等都不支持。这对于 yield 一个类型不确定的变量来说,是很不方便的。而且这跟 await 也是不兼容的。 其次,在 yield 数组和对象时, tj/co 库会自动对数组中的元素和对象中的字段递归的遍历,将其中的所有的 Promise 元素和字段替换为实际值,这对于简单的数据来说,会方便一些。但是对于带有循环引用的数组和对象来说,会导致无法获取到结果,这是一个致命的问题。即使对于不带有循环引用结构的数组和对象来说,如果该数组和对象比较复杂,这也会消耗大量的时间。而且这跟 await 也是不兼容的。 再次,对于 thunk 函数, tj/co 库会认为回调函数第一个参数必须是表示错误,从第二个参数开始才表示返回值。而这对于回调函数只有一个返回值参数的函数,或者回调函数的第一个参数不表示错误的函数来说, tj/co 库就无法使用了。 而 hprose.co 对 yield 的支持则跟 await 完全兼容,支持对所有类型的数据进行 yield 。 当 hprose.co 对 chunk 函数进行 yield 时,如果回调函数第一个参数是 Error

ajax之async属性

一笑奈何 提交于 2019-11-29 23:44:49
原文链接: https://www.cnblogs.com/zhaotiancheng/p/7428799.html 实际项目中,ajax可以说是 非常、非常、非常 常用的。而ajax默认是 异步请求 而有的时候 ajax的异步却不是特别的好用 //查询当前餐桌类型下有多少个餐桌 function tableCount(tableTypeId){ var count = 0; $.ajax({ data:{ restaurantId:'${restaurantId}', businesstimeid:timeId, predetermine:$('#orderdate').datebox('getValue'), currentDate:parent.currentDate, theBsnssTimId:parent.theBsnssTimId, typeId:tableTypeId }, url:'${ctx}/cater/caterTable/selectByTimeAndDuetotype', dataType:"JSON", type:"POST", async:false, success:function(result){ count = result.length; } }); return count; } 调用这个方法时(方法的参数无视) var count =

retryOnError

╄→尐↘猪︶ㄣ 提交于 2019-11-29 21:40:55
public static async retryOnError<T>(callback: () => Promise<T>, retryCount: number = 5, waitPeriod: number = 1000): Promise<T> { let tryCount = 0; while (true) { tryCount++; try { return await callback(); } catch (error) { if (tryCount >= retryCount) { throw error; } else { await browser.sleep(waitPeriod); } } } } How to use? public static async clickElementWhenClickable( selectortype: string, selector: string, text?: string, scope?: string ): Promise<void> { let item: ElementFinder; if (selectortype === 'xpath') { item = Helper.locateElementWithXpath(selector); } else if (selectortype ===

async、await

☆樱花仙子☆ 提交于 2019-11-29 19:41:25
async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案。目前,async / await这个特性已经是 stage 3 的建议。 (1)Promise、generator、yield是ES6中的异步解决方案,使用Promise之后,可以很好的减少嵌套的层数。 function fn(p) { return new Promise((resolve, reject) => { console.log(p); setTimeout(() => { console.log('test:',p); resolve(); }, 2000); }); } function handlePromise() { fn("aaa") .then(() => { return fn("bbb"); }) .then(() => { return fn("ccc"); }) .catch(reason => console.log(`catch reason: ${reason}`)); } 执行:handlePromise() Promise仍然存在缺陷,它只是减少了嵌套,并不能完全消除嵌套。对于多个promise串行执行的情况,第一个promise的逻辑执行完之后,我们需要在它的then函数里面去执行第二个promise,这个时候会产生一层嵌套。另外

Android学习-使用Async-Http实现图片压缩并上传功能

自古美人都是妖i 提交于 2019-11-29 19:32:06
Android学习-使用Async-Http实现图片压缩并上传功能 前言 (转载请注明出处,谢谢!) 最近在做一个小项目,项目中要实现上传图片到服务器,而这个例子是实现图片的尺寸压缩,将获取到的压缩图片转为流,然后使用Async-Http开源框架实现图片流的上传,然后在服务器端将流写入本地。 效果图 安卓端 服务器端 解决 安卓端 一、点击加载本地相册选择图片,然后加载到ImageView中去,并获取图片地址以供后面图片上传时使用。 //点击图片打开选择图片界面 photo.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //使用Intent触发选择Action Intent intent = new Intent(Intent.ACTION_PICK, null); //打开系统提供的图片选择界面 intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); //传参以在返回本界面时触发加载图片的功能 startActivityForResult(intent, 0x1); } }); // 在选择图片后返回本界面调用此方法 @Override protected

Boost.Asio技术文档

烈酒焚心 提交于 2019-11-29 16:56:41
Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0 的软件授权进行发布(见附带的LICENSE_1_0.txt文件或从 http://www.boost.org/LICENSE_1_0.txt ) Boost.Asio 是用于网络和低层IO 编程的跨平台C++库,为开发者提供了C++环境下稳定的异步模型. 综述 基本原理 应用程序与外界交互的方式有很多, 可通过文件,网络,串口或控制台.例如在网络通信中,完成独立的IO操作需要很长时间.对应用程序开发者提出了一个挑战. Boost.Asio 提供了管理需长时间运行操作的工具, 但不必涉及到线程的并发模式和显式锁定. Boost.Asio 库使用C++ 来实现,提供如网络编程等常用的操作系统接口. Boost.Asio实现了如下目标: · 可移植性Portability. 库支持一系列的常用系统操作, 具有稳定的跨平台特性. · 可扩展性Scalability. 库可以帮助开发者构建数千并发连接的网络应用程序.asio 库实现的每个系统操作都使用了最具扩展性的机制. · 效率Efficiency. 库支持发散聚合IO(scatter-gather I/O) 等技术,使应用程序尽量少的拷贝数据. · 可以像BSD Sockets

异步操作要了解的ES7的async/await

谁说胖子不能爱 提交于 2019-11-29 13:24:49
1、什么是async、await? async顾名思义是“异步”的意思,async用于声明一个函数是异步的。而await从字面意思上是“等待”的意思,就是用于等待异步完成。并且await只能在async函数中使用。 通常async、await都是跟随Promise一起使用的。为什么这么说呢?因为async返回的都是一个Promise对象同时async适用于任何类型的函数上。这样await得到的就是一个Promise对象(如果不是Promise对象的话那async返回的是什么 就是什么); await得到Promise对象之后就等待Promise接下来的resolve或者reject。 我们先看个例子: 1 var sleep = function (time) { 2 return new Promise(function (resolve, reject) { 3 setTimeout(function () { 4 resolve(); 5 }, time); 6 }) 7 }; 8 9 var start = async function () { 10 // 在这里使用起来就像同步代码那样直观 11 console.log('start'); 12 await sleep(3000); 13 console.log('end'); 14 }; 15 16 start();

NET 中的 async/await 异步编程

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-29 12:33:34
前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入的,由于之前对于异步编程不是很了解,所以花费了一些时间学习一下相关的知识,并整理成这篇博客,如果在阅读的过程中发现不对的地方,欢迎大家指正。 同步编程与异步编程 通常情况下,我们写的C#代码就是同步的,运行在同一个线程中,从程序的第一行代码到最后一句代码顺序执行。而异步编程的核心是使用多线程,通过让不同的线程执行不同的任务,实现不同代码的并行运行。 前台线程与后台线程 关于多线程,早在.NET2.0时代,基础类库中就提供了Thread实现。默认情况下,实例化一个Thread创建的是前台线程,只要有前台线程 在运行,应用程序的进程就一直处于运行状态,以控制台应用程序为例,在Main方法中实例化一个Thread,这个Main方法就会等待Thread线程 执行完毕才退出。而对于后台线程,应用程序将不考虑其是否执行完毕,只要应用程序的主线程和前台线程执行完毕就可以退出,退出后所有的后台线程将被自动终 止。来看代码应该更清楚一些: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 using System; using