zoukankan      html  css  js  c++  java
  • C#~异步编程再续~async异步方法与同步方法的并行

    返回目录

    今天晚上没事写了个测试的代码,又看了看.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如下

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

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

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

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

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

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

    返回目录

  • 相关阅读:
    Fiddler 捕获HTTPS流量
    Fiddler 弱网测试
    Fiddler Composer设计器, Fitter过滤器,断点
    Fiddler Statistics统计,Inspector检查器,AutoResponder自动响应器
    Fiddler Session List会话列表、命令行与状态栏
    Fiddler菜单栏工具栏
    HTTP协议请求与响应详解
    Postman 运用Cookie
    Postman 文件上传请求
    Postman 头域操作
  • 原文地址:https://www.cnblogs.com/lori/p/4814864.html
Copyright © 2011-2022 走看看