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立即返回的更多相关文章

  1. async和await的返回值——NodeJS, get return value from async await

    在ES6和ES5中promise的执行也有不同点(上述提到,ES6中promise属microtask:在ES5中,暂未接触到有api直接操作microtask的,所以.then的异步是用setTim ...

  2. .NET(C#):await返回Task的async方法

    众所周知,async方法只可以返回void,Task和Task<T>. 对于返回void的async方法,它并不是awaitable,所以其他方法不能用await方法来调用它,而返回Tas ...

  3. [译]async/await中阻塞死锁

    这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的两篇博文中翻译过来. 原文1:Don'tBlock o ...

  4. async await 多线程

    async await 并没有开启多线程  出现await的地方 只是开启了一个子线程继续往后执行  主线程返回 防止阻塞 相当于  await customerRepository.getall() ...

  5. [译]async/await中使用阻塞式代码导致死锁 百万数据排序:优化的选择排序(堆排序)

    [译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的 ...

  6. [译]async/await中使用阻塞式代码导致死锁

    原文:[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Clea ...

  7. promise和async await的区别

    在项目中第一次遇到async await的这种异步写法,来搞懂它 项目场景 :点击登录按钮后执行的事件,先进行表单校验 this.$refs.loginFormRef.validate(element ...

  8. 【C# TAP 异步编程】三、async\await的运作机理详解

    [原创] 本文只是个人笔记,很多错误,欢迎指出. 环境:vs2022  .net6.0 C#10 参考:https://blog.csdn.net/brook_shi/article/details/ ...

  9. async和await详解

     async和await详解 1.非UI线程中执行 Test()函数带有async 和await ,返回值写成Task. 1 using System; 2 using System.Threadin ...

  10. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

随机推荐

  1. 湖北电信创维E900-S机顶盒-精简系统装当贝桌面

    一.打开机顶盒进入本地配置,输入密码:6321,然后打开其他设置-管理应用程序,连续按遥控器方向右键5次左右,这时会出现[USB调试]并打开: 二.从电脑里下载好当贝市场(点击立即下载).当贝桌面(点 ...

  2. DataX - [02] 安装部署

    操作系统:Alibaba Cloud Linux release 3 (Soaring Falcon) Java:1.8.0_372 Python:3.6.8 => 2.7.1 一.安装部署 ( ...

  3. Linux用户登录失败锁定策略

    1.账户锁定策略介绍 在Linux系统中,为了提高系统安全性,防止暴力破解攻击,我们可以通过配置PAM(Pluggable Authentication Modules)模块来限制登录失败次数并锁定用 ...

  4. 关于vue,npm,webpack,nod的一点心得

    玩前端,换不到一颗米,纯粹是基于兴趣(我也希望能换到米,但真到那一天,说不定兴趣就没了,^_^),感觉玩这个能带来快乐,仅此而已. 最近,又来了点兴趣,读了读<vue实战>,自然免不了再次 ...

  5. C# 中的“相等判断”

    C# 中的"相等判断" C# 中判断相等的方式很多,例如: 双等号 ==​ 实例的 Equals()​ 方法 ​Object.Equals()​ 静态方法 ​Object.Refe ...

  6. 音视频SDK对比|K歌App中的实时合唱功能如何进行技术选型

    摘要 在线K歌软件的开发有许多技术难点,需考虑到音频录制和处理.实时音频传输和同步.音频压缩和解压缩.设备兼容性问题等技术难点外,此外,开发者还应关注音乐版权问题,确保开发的应用合规合法. 前言 前面 ...

  7. js回忆录(3) -- 循环语句,前后缀运算符

    计算机对于大批量数据的处理速度比起人类不知道快了多少,因此对于重复的操作,使用循环语句处理是很方便的,对于我们前端来说,给同一标签的元素绑定事件啦,tab切换啦,左右联动效果啦,等等都可以使用循环语句 ...

  8. 线性判别分析(LDA):降维与分类的完美结合

    在机器学习领域,线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的算法,它在降维和分类任务中都表现出色. LDA通过寻找特征空间中能够最大化类间方差和最小 ...

  9. Model Context Protocol(MCP)在claude使用

    定义 MCP通过统一的协议,使AI模型(如Claude.GPT等)能够动态调用外部工具(如数据库.API.本地文件等),并实现跨模型的上下文共享与协作 架构 客户端-服务器模型: MCP主机(Host ...

  10. Salt之Cpu 100%无响应故障 Salt request timed out. The master is not responding

    报错信息如下: Salt request timed out. The master is not responding. You may need to run your command with ...