Net Core教程

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

本文主要是介绍C# 手动终止async/await异步方法的几种实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

终止异步方法的实现主要依靠 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);
                }
            }
        }
    }
}

  

 

这篇关于C# 手动终止async/await异步方法的几种实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!