首页 > 编程语言 >C# 手动终止async/await异步方法的几种实现

C# 手动终止async/await异步方法的几种实现

时间:2022-09-05 00:34:36浏览次数:181  
标签:Console string C# await System token using async

 

终止异步方法的实现主要依靠 CancellationToken 类

 

using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp21
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            CancellationTokenSource source = new CancellationTokenSource();
            source.CancelAfter(2000); //2000毫秒
            CancellationToken ct = source.Token;
            await DownloadAsync("https://www.bilibili.com/", 10, ct);
            Console.ReadLine();
        }
        /// <summary>
        /// 从网址循环下载网页内容
        /// </summary>
        /// <param name="url">网址</param>
        /// <param name="n">下载次数</param>
        /// <param name="token">令牌</param>
        /// <returns></returns>
        static async Task DownloadAsync(string url, int n, CancellationToken token)
        {
            using (HttpClient http = new HttpClient())
            {
                string str = string.Empty;
                for (int i = 0; i < n; i++)
                {
                    // 方法1:在传入参数的时间范围内还没完成请求则终止本次任务
                    //if (token.IsCancellationRequested)
                    //{
                    //    Console.WriteLine();
                    //    Console.WriteLine("请求被提前终止!");
                    //    break;
                    //}
                    str = await http.GetStringAsync(url);
                    Console.WriteLine(str);

                    //方法2:在传入参数的时间范围内还没完成请求则返回一个错误
                    //token.ThrowIfCancellationRequested();


                    //方法3:把token传给需要调用的方法
                    await http.GetAsync(url, token);
                }
            }
        }
    }
}

  

 

标签:Console,string,C#,await,System,token,using,async
From: https://www.cnblogs.com/TanOnly/p/16656647.html

相关文章

  • sourcetree安装
    安装版本3.4.60.安装前准备安装包下载和安装gitsourcetree3.4.6安装包密码:5ercgit安装包,这个免费,点击安装无脑下一步即可,也可以用sourcetree自动安装git,但是会......
  • [心情] 解放CSS 单行transform,分离scale, translate 和rotate 吧!
    [心情]解放CSS单行transform,分离scale,translate和rotate吧!定期都有在关注YoutubeWebDevSimplified的介绍前端新讯的影片,虽然很早就知道有一般拆解Transform属......
  • CSS Glassmorphism 按钮悬停效果
    CSSGlassmorphism按钮悬停效果CSSGlassmorphism按钮悬停效果免费下载在HTML和CSS中HTML:<head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compat......
  • HTML、CSS 和 JavaScript 格式的 3D 玻璃天气图标
    HTML、CSS和JavaScript格式的3D玻璃天气图标3D玻璃天气图标免费下载****在HTML、CSS和JavaScript中HTML:<divclass="weatherweather--sun"><divclass......
  • Web 中的可访问性 (CSS)
    PhotobyKOBU代理商on不飞溅Web中的可访问性(CSS)这是我关于Web上的可访问性的第二篇文章。在里面上一篇文章,我在HTML中谈到了Web上的可访问性,而这一次,......
  • c# 框架系列 ———— EFCore 模型篇 [一]
    前言简单介绍一下EfCore的模型篇正文内容来源:配置模型配置模型的方式,一种是fluentapi还一种是属性的方式。publicclassBlog{ publicintBlogId{get;set;......
  • Docker 部署
    部署docker1.关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld2.停用并禁用selinux查看:getenforce临时禁用:setenforce0查看配置文件:grep^SELI......
  • 【JS每日一题】Array.reduce函数
    题目题目来源于前端面试题宝典[[0,1],[2,3]].reduce((acc,cur)=>{returnacc.concat(cur)},[1,2])解析[1,2]会作为初始值首次放入到第一个参数......
  • Docker 本地安装常用应用
    docker启动容器设置自启动加上配置:--restart=always比如:dockerrun-tid--name【定义容器名称】-p8081:8080--restart=always【镜像名称】如果是已经启动的容器......
  • springMVC 获取参数
    1.servlet@GetMapping("/params")publicStringtest5(HttpServletRequestrequest){Stringusername=request.getParameter("username");Stringpassword......