C# async await 测试一

using System.Threading.Tasks;

namespace awaitTest2
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("主线程开始!主线程ID:"+Thread.CurrentThread.ManagedThreadId);
            F1();   // 这里没有await,F1()会在一个独立的线程中运行,主线程不会等待它完成
                    //遇到await时,F1()会将控制权返回给调用它的线程(即主线程)
             //await F1(); // 这里有await,主线程会等待F1()完成后再继续执行
            Console.WriteLine("主线程结束!");

            Console.ReadLine();  // 防止主线程结束,观察子线程输出
        }

        public static async Task F1()
        {
            Task task = Task.Run(() =>
            {
                Console.WriteLine("子线程开始:" + Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(3000);
                Console.WriteLine("子线程结束");
            });

            await task;

            Console.WriteLine("后续线程:" + Thread.CurrentThread.ManagedThreadId);
        }
    }
}

通过F1()直接调用的结果:

image

 

如果主线程即Main方法中不含Console.ReadLine();那么执行结果如下:主线程不会等到子线程结束就关闭了程序。(前台线程结束后,所有的后台线程也会被结束)

image

 

 

通过await F1()调用的结果:

 

image

 

posted @ 2025-10-08 14:46  竹楼风雨声  阅读(6)  评论(0)    收藏  举报