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 @ 2023-10-28 20:23  高_山_流_水  阅读(17)  评论(0)    收藏  举报