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状态.

 

posted @   高_山_流_水  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示