C# 控制台程序验证await立即返回
class Program{
public static volatile bool flag = true;
public static void Main()
{
Action a = null;
Thread t = new Thread(() =>
{
Console.WriteLine("before:" + Thread.CurrentThread.ManagedThreadId);
while (flag)
{
a?.Invoke();
}
Console.WriteLine("return:"+Thread.CurrentThread.ManagedThreadId);
});
t.Start();
Console.WriteLine("输入c");
var s=Console.ReadLine();
if (s == "c")
{
a += TestAsync;
}
Console.ReadLine();
}
public static async void TestAsync()
{
await System.Threading.Tasks.Task.Delay(1);
flag = false;
Console.WriteLine("after"+ Thread.CurrentThread.ManagedThreadId);
}
}
output:
```c#
输入c
before:3
c
after8
after12
return:3
after9
after9
解读:
当输入c后,立即返回,打印出"return:3",这里也可以看到立即返回后的线程ID与before:3的ID是一样的,更加确认是返回到了原来的线程,而flag在及时改为false之前,while循环持续进行,并调用TestAsyn,可以发现返回后的线程并不是原来的线程。
C# 控制台程序验证await立即返回的更多相关文章
- async和await的返回值——NodeJS, get return value from async await
在ES6和ES5中promise的执行也有不同点(上述提到,ES6中promise属microtask:在ES5中,暂未接触到有api直接操作microtask的,所以.then的异步是用setTim ...
- .NET(C#):await返回Task的async方法
众所周知,async方法只可以返回void,Task和Task<T>. 对于返回void的async方法,它并不是awaitable,所以其他方法不能用await方法来调用它,而返回Tas ...
- [译]async/await中阻塞死锁
这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的两篇博文中翻译过来. 原文1:Don'tBlock o ...
- async await 多线程
async await 并没有开启多线程 出现await的地方 只是开启了一个子线程继续往后执行 主线程返回 防止阻塞 相当于 await customerRepository.getall() ...
- [译]async/await中使用阻塞式代码导致死锁 百万数据排序:优化的选择排序(堆排序)
[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的 ...
- [译]async/await中使用阻塞式代码导致死锁
原文:[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Clea ...
- promise和async await的区别
在项目中第一次遇到async await的这种异步写法,来搞懂它 项目场景 :点击登录按钮后执行的事件,先进行表单校验 this.$refs.loginFormRef.validate(element ...
- 【C# TAP 异步编程】三、async\await的运作机理详解
[原创] 本文只是个人笔记,很多错误,欢迎指出. 环境:vs2022 .net6.0 C#10 参考:https://blog.csdn.net/brook_shi/article/details/ ...
- async和await详解
async和await详解 1.非UI线程中执行 Test()函数带有async 和await ,返回值写成Task. 1 using System; 2 using System.Threadin ...
- [.NET] 利用 async & await 的异步编程
利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html 目录 异步编程的简介 异 ...
随机推荐
- Java 加密和解密
在 Java 中,加密和解密通常通过 Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 实现.以下是常见 ...
- 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
学习编程之初就常被告诫:"永远不要相信用户的输入",但实际编码中,可能因为各种原因而忽略这点,本文尝试以 SQL 注入的角度探寻校验输入的重要性 以下实验均以 SQLI labs ...
- 关于JS框架的一点想法
读了几页<vue.js设计与实现>,记录几点想法: 1.Html是根本 2.无论哪个框架,不管是运行时框架,还是编译时框架,最终都要通过标签"绘制"页面 3.这个&qu ...
- cnpm : 无法加载文件 C:\Users\Raytine\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本。
解决方式: 1.在系统中搜索框 输入 Windos PowerShell 2.点击"管理员身份运行" 3.输入" set-ExecutionPolicy RemoteSi ...
- matplotlib -- 绘图操作 -- 数据分析三剑客
博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jup ...
- Linux 系统出现异常排查思路
16 系统出现异常排查思路16.1 查看用户信息16.1.1查看当前的用户# who 04:39:39 up 1:30, 1 user, load average: 0.01, 0.01, 0. ...
- Linux系统中的目录和文件夹的区别
Linux系统中的目录和文件夹的区别 目录 Linux系统中的目录和文件夹的区别 一.概念与术语背景 1.目录(Directory) 2.文件夹(Folder) 二.技术实现差异 1.存储内容 2.权 ...
- study PostgreSQL【3-get数据库中all表以及表的字段信息】
get一表的字段相关信息: SELECT col_description(a.attrelid,a.attnum) as comment,pg_type.typname as typename,a.a ...
- C#+Selenium+Nunit实现Web自动化demo
1.新建Nunit工程 步骤如下: 打开Rider选择图示选项 使用Nuget安装对应库 2.编写代码 代码如下: using NUnit.Framework; using OpenQA.Seleni ...
- 字符串匹配究极大招【KMP】:带你一步步从原理到构建
目录 前言 KMP原理 什么是前缀表 如何构建前缀表 next数组 使用next数组做匹配 实战演练 前言 一文带你了解如何去理解并实现KMP算法.本文用于记录自己的学习过程,同时向大家进行分享相关的 ...