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

浙公网安备 33010602011771号