C#~异步编程再续~async异步方法与同步方法的并行

返回目录html

今天晚上没事写了个测试的代码,又看了看.net的并行编程,两个方法,一个是异步async修饰的,另外一个是普通的方法,在控制台程序的Main方法里去调用这两个方法,会有什么结果呢?编程

首先咱们看一下方法的组成,step1以下异步

 public async void Step1()
        {
            try
            {
                //await进行等待后,新线程的异常能够被主线程捕捉,这是正常的,下面的代码不会被执行
                await Task.Run(() =>
                {

                    Console.WriteLine("Step1 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);
                    Thread.Sleep(3000);
                });

                await Task.Run(() =>
                {
                    Console.WriteLine("Step1 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);
                    Console.WriteLine("ThreadTest.Test Runing");
                });
            }
            catch (Exception ex)
            {

                Console.WriteLine("ThreadTest" + ex.Message);
            }
        }

step2以下async

 public void Step2()
        {
            Console.WriteLine("Step2 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);
        }

咱们能够看到step2很简单,不会有什么延时,就是在屏幕上输出一段话,而step1就显得复杂一些了,它是一个异步的方法,而且使用Task.Run开启了两个新线程,而第一测试

个线程的运行时间是3秒,很长呀,哈哈,第二个是在屏幕上输出一段话!如今咱们把step1和step2写在一块儿会出现什么状况呢?spa

 var test = new ThreadTest();
 test.Step1();//整个方法不阻塞,但方法内部有可能阻塞
 test.Step2();

经过上面的图咱们认识到了,step1按着顺序先执行,而因为第一个线程要执行3秒,这时step2被并行执行,3秒后,step1的第二个线程继续执行(因为使用了await,因此step1内部进行了等待,不会应响他外面的方法,也应响不了,呵呵!.net

怎么了,看了上面的例如,是否是对并行编程有了新的认识呢!线程

返回目录code

相关文章
相关标签/搜索