zoukankan      html  css  js  c++  java
  • Task async await

    暇之余,究多Task、async、await。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApp2
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                for (int i = 0; i < 5; i++)
                {
                    Task.Run(() => Run2()); //类似于线程池,开启线程小于5
                }
    
                for (int i = 0; i < 5; i++)
                {
                    new Thread(Run1).Start();//开启5个线程
                }
    
                Task<string> task = Task.Run(
                    () => Thread.CurrentThread.ManagedThreadId + ""
                );
                Console.WriteLine(task.Result);//task.Result 会等到task执行完毕执行
    
                Console.WriteLine("-------主线程启动-------");
                Task<int> task2 = GetStrLengthAsync();
                Console.WriteLine("主线程继续执行");
                Console.WriteLine("Task返回的值" + task2.Result);
                Console.WriteLine("-------主线程结束-------");
            }
    
            static void Run1()
            {
                Console.WriteLine("Thread Id =" + Thread.CurrentThread.ManagedThreadId);
            }
    
            static void Run2()
            {
                Console.WriteLine("Task调用的Thread Id =" + Thread.CurrentThread.ManagedThreadId);
            }
    
            //async必须返回void Task Task<int>
            static async Task<int> GetStrLengthAsync() 
            {
                Console.WriteLine("GetStrLengthAsync方法开始执行");
                //await 必须用来修饰Task Task<TResult>,而且只能出现在async修饰的异步方法中。
                //遇到await并未开启新线程,而是遇到GetString方法中的Task.Run()时才开启了新线程
                string str = await GetString(); 
                Console.WriteLine("GetStrLengthAsync方法结束执行");
                return str.Length;
            }
    
            static Task<string> GetString()
            {
                Console.WriteLine("GetString方法开始执行");
                return Task.Run(() =>
                {
                    Thread.Sleep(2000);
                    return "GetString返回值";
                });
            }
    
        }
    
    
    }
  • 相关阅读:
    PID入门的十五个基本概念
    串级调节系统参数整定方法(串级调节器参数整定)
    PID参数整定快速入门(调节器参数整定方法)
    在 Altium designer 09 中显示隐藏飞线
    如何高效利用GitHub
    基于markdown的blog系统调研1:typecho
    使用GitBook, Git github, Markdown 快速发布你的书籍
    献给写作者的 Markdown 新手指南及语法
    ubuntu搭建Git服务器
    CentOS搭建git服务器实测
  • 原文地址:https://www.cnblogs.com/chenyishi/p/8333930.html
Copyright © 2011-2022 走看看