C# async await
static void Main(string[] args) { var task = IntTask(); Console.WriteLine("等待中..."); Console.WriteLine($"算完了? 让我康康! result = {task.Result}"); Console.WriteLine(); } static async Task<int> IntTask() { Thread.Sleep(2000); Console.WriteLine("等3秒吧"); await Task.Delay(3000); IntTask1(); Console.WriteLine("等3秒吧11111"); return 1; } static async Task<int> IntTask1() { Thread.Sleep(2000); Console.WriteLine("Task1————等3秒吧"); await Task.Delay(3000); Console.WriteLine("Task1————等3秒吧11111"); return 1; }
1.async
关键字修饰的方法在到达第一个 await
表达式前会同步执行.
2.await IntTask1(); 第一点是无论外部调用函数是否有async修饰(当前函数必有async修饰)都会挂起当前函数并返回调用函数让其继续向下执行。第二点是一定会等待IntTask1完全执行完毕.
3.如果 async
关键字修饰的方法不包含 await
表达式或语句,则该方法将同步执行。
4.async 修饰方法返回类型只能为: void、Task、Task<TResult>、ValueTask 或 ValueTask<TResult>
Task<TResult>: 代表一个返回值T类型的操作。
Task: 代表一个无返回值的操作。
void: 为了和传统的事件处理程序兼容而设计。
var consumerTask = Task.Run(async () => { // Consume messages from channel and write to response stream. IntTask1(); });
async关键字对Task类没有影响类型被强制转换内部await不会导致线程返回. IntTask1执行完前 consumerTask线程会先结束并转为RanToCompletion状态.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话