首页 > 其他分享 >异步 Async & Await

异步 Async & Await

时间:2023-07-20 16:12:08浏览次数:31  
标签:异步 await Console Thread Await System async Async

async在C#世界里是上下文关键字。它只有在修饰一个方法的时候才自动被编译器识别为关键字,在代码的其他位置上可以被用作变量名等其他任何用途。
async关键字用来修饰两类方法: lambda表达式或者异步方法。
拥有async修饰的方法称为async方法,比如:

就如上面这个方法ExampleMethodAsync(),微软爷爷特别喜欢在定义异步函数名字后习惯加个Async后缀(这不是必须的,加不加编译器既不会报错,也不会影响异步特性),告诉我们这个方法是个异步方法。我们在自己定义异步方法的时候,也可以照搬这个微软的习惯。
async修饰的方法内部,应当出现一个await关键字,两个关键字一般成对出现。当然,如果我们不小心忘记写await表达式或者语句,这个async方法默认按照同步方式运行,同时,编译器会友好地提示我们是不是漏写了await。此外,async方法内部,可以有多个await语句。
awiat运行的语句,一般都是比较费时的任务(也就是会阻塞主线程的一些操作,比如获取Http应答,写入文档,保存数据库等),要不然就不需要异步了。

 async方法可以是下面三种返回类型:

  • Task
  • Task<TResult>
  • void 这种返回类型一般用在event事件处理器中,或者用在你只需要任务执行,不关心任务执行结果的情况当中。
  • 任何其他具有GetAwaiter方法的类型(从C#7.0开始)
  • 注意,我们无法等待(awiat)一个async void 方法。  

using System;
using System.Threading.Tasks;
using System.Threading;

namespace test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId} Hello, I am Caller!");
DoAsync();
Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId} Hello, I am Caller too!");
Console.Read();
}
public static async void DoAsync()
{
System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId} In DoAsync(), before SunAsync()");
await SunAsync();
System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId} After SunAsync(), DoAsync() End.");
}
public static async Task SunAsync()
{
var t = Task.Run(()=>{
System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId} New Task~");
for(int i=0 ; i<10; i++)
{
Thread.Sleep(1000);
System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId} I am playing game...");
}
});
System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId} After Task, before await.");
await t;
System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId} After await, before SunAsync() exit.");
}
}
}

运行结果:

 

(206条消息) C# Task和async/await详解_c# task await_btfireknight的博客-CSDN博客

(206条消息) C#-Async关键字(异步方法)_c#async_MrLss的博客-CSDN博客

标签:异步,await,Console,Thread,Await,System,async,Async
From: https://www.cnblogs.com/ZBO123/p/17568664.html

相关文章

  • 关于async / await的异常捕获
    关于async/await的异常捕获:https://blog.csdn.net/qq_42543244/article/details/123423894?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168982167716800180661339%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=16898......
  • C# 后端请求 PostAsync GetStringAsync
     stringsendUrl=$"http://10.172.1.20/wtoptst/ws/r/awsp920";HttpClientsendclient=newHttpClient();stringtestStr=JsonConvert.SerializeObject(reques);//查看内容(测试用)HttpConten......
  • IC卡读卡器web插件中使用js异步await/async调用接口
    js中使用异步await/async方式,对于程序的结构和逻辑都有非常大的好处,对于异步await/async有如下描述:async表示这是一个async函数,await只能用在async函数里面,不能单独使用.async返回的是一个Promise对象,await就是等待这个promise的返回结果后,再继续执行.await等待的是一个Pro......
  • Asp.Net Core 实现异步操作锁 (SemaphoreSlim)
    /设置同时访问线程最大数量staticSemaphoreSlim_semaphore=newSemaphoreSlim(4);staticvoidAccessDatabase(stringname,intseconds){Console.WriteLine($"{name}waitstoaccessadatabase");_semaphore.Wait();Console.WriteLine($"{name}wa......
  • java异步调用延迟执行
    Java异步调用延迟执行简介在Java开发中,我们经常需要处理一些耗时的操作,而为了提高程序的性能和用户体验,我们通常会采用异步调用的方式来执行这些耗时操作。异步调用可以让主线程继续执行其他任务,而不需要等待耗时操作完成。本文将介绍如何在Java中实现异步调用延迟执行的方法,并......
  • UART——通用异步收发传输器
    特点:发送—并转串;接收—串转并;全双工传输1、发送:常见设置包含:起始位、数据位、波特率、奇偶校验类型、停止位、空闲位(1)起始位先发一个逻辑0,表示传输字符开始,依靠检测起始位来实现发送与接收方的时间同步。(2)数据位单个UART数据传输的数据位数,可以是5、6、7或8(默认)(3......
  • @Async组件的细节说明
    使用方式启动类里面使用@EnableAsync注解开启功能,自动扫描定义异步任务类并使用@Component标记组件被容器扫描,异步方法加上@Async@Async失效情况注解@Async的方法不是public方法注解@Async的返回值只能为void或者Future注解@Async方法使用static修饰也会失......
  • useEffect、异步请求、定时器使用useState闭包问题
    useEffect闭包问题:问题:useEffect使用useState会使调用的所有方法内部的state值为useEffect周期的值,即使在这个过程中useState的值变化也不能影响调用方法内获取到原始值解决方式:使用useCallabck可以避免由此产生的闭包问题异步请求、定时器等js闭包问题:问题:异步请求和定时器......
  • 【Python】从同步到异步多核:测试桩性能优化,加速应用的开发和验证
    测试工作中常用到的测试桩mock能力在我们的测试工作过程中,可能会遇到多个项目并行开发的时候,后端服务还没有开发完成,或者我们需要压测某个服务,这个服务测在试环境的依赖组件(如MQ)无法支撑我们svr的并发访问的场景,这个时候我们可能就需要手写一个服务,来替代测试环境的这些依赖组......
  • 【一】Ajax与异步编程之web服务端
    【一】Ajax与异步编程之web服务端Ajax属于客户端网络技术,属于js范畴。基于aiohttp模Ajax与异步编程之web服务端块构建一个提供http协议的web服务器,并准备数据给客户端请求使用。pipinstallaiohttppipinstallaiohttp_corsserver.pyfromaiohttpimportwebimporta......