zoukankan      html  css  js  c++  java
  • C# task用法

    C# Task 的用法

    其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观。代码更简洁了,使用Task来进行操作。可以跟线程一样可以轻松的对执行的方法进行控制。

    顺便提一下,配合CancellationTokenSource类更为可以轻松的对Task操作的代码进行中途终止运行。

    创建Task

    创建Task有两种方式,一种是使用构造函数创建,另一种是使用 Task.Factory.StartNew 进行创建。如下代码所示

    1.使用构造函数创建Task

     Task t1 = new Task(MyMethod);
    

     2.使用Task.Factory.StartNew 进行创建Task

    Task t1 = Task.Factory.StartNew(MyMethod);

    其实这两种方式都是一样的,Task.Factory 是对Task进行管理,调度管理这一类的。好学的伙伴们,可以深入研究。这不是本文的范畴,也许会在后面的文章细说。

    运行 Task

    运行Task的两种方式,在上面我们已经提到过了,一种等待运行完毕,另一种则等待所有运行完毕。不过这里还有一种就是异步运行跟使用多线程一样,调用Task对象中的Start()方法即可。看看下面这个控制台示例。纯粹是Wait和AllWait的话,仅仅是等待。而不是执行。所以我们还需要调用Start()方法

    static void Main(string[] args)
    {
        Task t1 = new Task(MyMethod);
        t1.Start();
        Console.WriteLine("主线程代码运行结束");
        Console.ReadLine();
    }
     
    static void MyMethod()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine(DateTime.Now.ToString());
            Thread.Sleep(1000);
        }
    }

    Task在WebApi中的运用

            static async Task MainAsync()
            {
                // your async code here
                var _httpClient = new HttpClient();
                _httpClient.BaseAddress = new Uri("http://localhost:48959/");
                 token = await GetAccessToken();
                Console.WriteLine(token);
                Console.WriteLine(token.Length);
                _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    
                Console.WriteLine(await (await _httpClient.GetAsync("/currnetUser")).Content.ReadAsStringAsync());
                Console.ReadKey();
            }
        static  void Main(string[] args)
            {
                MainAsync().Wait();
            }

    在一个线程调用Wait方法时,系统会检查线程要等待的Task是否已经开始执行,如果任务正在执行,那么这个Wait方法会使线程阻塞,直到Task运行结束为止。

  • 相关阅读:
    git shell自动打tag
    git 获取最新的匹配到的tag
    centOS debian ubuntu 一键安装 docker 教程
    git将当前分支的修改推到其他分支
    MusicPlayer2
    Ventoy 多合一启动盘制作工具神器
    electron-builder 下载 electron过慢或报错的解决办法
    解决npm install 报错“npm WARN pug-loader@2.4.0 requires a peer of pug@^2.0.0 but none is installed. You must install peer dependencies yourself.“
    全能笔记软件 Notion 的“中国版" wolai
    Your branch is behind 'origin/master' by N commits, and can be fast-forwarded 解决方法
  • 原文地址:https://www.cnblogs.com/vincentGan/p/6962126.html
Copyright © 2011-2022 走看看