首页 > 系统相关 >windows C#-取消任务列表(上)

windows C#-取消任务列表(上)

时间:2024-11-23 20:35:07浏览次数:7  
标签:Task Console windows 列表 C# https learn com microsoft

如果不想等待异步控制台应用程序完成,可以取消该应用程序。 通过遵循本文的示例,可将取消添加到下载网站内容的应用程序。 可通过将 CancellationTokenSource 实例与每个任务进行关联来取消多个任务。 如果选择 Enter 键,则将取消所有尚未完成的任务。

创建示例应用程序

创建新的 .NET Core 控制台应用程序。 可通过使用 dotnet new console 命令或从 Visual Studio 进行创建。 在你最喜欢的编辑器中打开 Program.cs 文件。

替换 using 语句

将现有 using 语句替换为以下声明:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
添加字段

在 Program 类定义中,添加以下三个字段:

static readonly CancellationTokenSource s_cts = new CancellationTokenSource();

static readonly HttpClient s_client = new HttpClient
{
    MaxResponseContentBufferSize = 1_000_000
};

static readonly IEnumerable<string> s_urlList = new string[]
{
    "https://learn.microsoft.com",
    "https://learn.microsoft.com/aspnet/core",
    "https://learn.microsoft.com/azure",
    "https://learn.microsoft.com/azure/devops",
    "https://learn.microsoft.com/dotnet",
    "https://learn.microsoft.com/dynamics365",
    "https://learn.microsoft.com/education",
    "https://learn.microsoft.com/enterprise-mobility-security",
    "https://learn.microsoft.com/gaming",
    "https://learn.microsoft.com/graph",
    "https://learn.microsoft.com/microsoft-365",
    "https://learn.microsoft.com/office",
    "https://learn.microsoft.com/powershell",
    "https://learn.microsoft.com/sql",
    "https://learn.microsoft.com/surface",
    "https://learn.microsoft.com/system-center",
    "https://learn.microsoft.com/visualstudio",
    "https://learn.microsoft.com/windows",
    "https://learn.microsoft.com/maui"
};

CancellationTokenSource 用于向 CancellationToken 发出请求取消的信号。 HttpClient 公开发送 HTTP 请求和接收 HTTP 响应的能力。 s_urlList 包括应用程序计划处理的所有 URL。

更新应用程序入口点

控制台应用程序的主入口点是 Main 方法。 将现有方法替换为以下内容:

static async Task Main()
{
    Console.WriteLine("Application started.");
    Console.WriteLine("Press the ENTER key to cancel...\n");

    Task cancelTask = Task.Run(() =>
    {
        while (Console.ReadKey().Key != ConsoleKey.Enter)
        {
            Console.WriteLine("Press the ENTER key to cancel...");
        }

        Console.WriteLine("\nENTER key pressed: cancelling downloads.\n");
        s_cts.Cancel();
    });
    
    Task sumPageSizesTask = SumPageSizesAsync();

    Task finishedTask = await Task.WhenAny(new[] { cancelTask, sumPageSizesTask });
    if (finishedTask == cancelTask)
    {
        // wait for the cancellation to take place:
        try
        {
            await sumPageSizesTask;
            Console.WriteLine("Download task completed before cancel request was processed.");
        }
        catch (TaskCanceledException)
        {
            Console.WriteLine("Download task has been cancelled.");
        }
    }
        
    Console.WriteLine("Application ending.");
}

目前将已更新的 Main 方法视为异步 main 方法,这允许将异步入口点引入可执行文件中。 将几条说明性消息写入控制台,然后声明名为 cancelTask 的 Task 实例,这将读取控制台密钥笔画。 如果按 Enter,则会调用 CancellationTokenSource.Cancel()。 这将发出取消信号。 下一步,从 SumPageSizesAsync 方法分配 sumPageSizesTask 变量。 然后,将这两个任务传递到 Task.WhenAny(Task[]),这会在完成两个任务中的任意一个时继续。

下一个代码块可确保在取消得到处理之前不会退出应用程序。 如果要完成的第一个任务是 cancelTask,则等待 sumPageSizeTask。 如果已取消,则等待时会引发 System.Threading.Tasks.TaskCanceledException。 块捕获该异常,并输出消息。

标签:Task,Console,windows,列表,C#,https,learn,com,microsoft
From: https://blog.csdn.net/m0_72813396/article/details/143997409

相关文章

  • windows C#-异步文件访问
    可使用异步功能访问文件。通过使用异步功能,你可以调用异步方法而无需使用回调,也不需要跨多个方法或lambda表达式来拆分代码。若要使同步代码异步,只需调用异步方法而非同步方法,并向代码中添加几个关键字。可能出于以下原因向文件访问调用中添加异步:异步使UI应用程序响应......
  • 【滑动窗口】变种题目:leetcode76:最小覆盖子串
    前言滑动窗口是算法的数组部分中非常重要的一个内容,关于滑动窗口的题目,我已经发布过相关的变种题目文章,链接如下,欢迎访问:【滑动窗口】相关题目分析讲解:leetcode209,leetcode904如果你不了解什么是滑动窗口,推荐观看代码随想录的基础讲解视频:拿下滑动窗口!|LeetCode......
  • C#之 WinForms 控件的详解(功能、用法、属性、事件以及常见的操作技巧)
    好的,继续深入剖析WinForms控件的详细内容。以下是对一些常见控件的详细分析,涵盖其功能、用法、属性、事件以及常见的操作技巧。1.Button(按钮控件)功能:按钮控件是最常见的控件,用于触发用户的交互操作,通常用来提交表单、执行任务等。关键属性:Text:按钮上显示的文本。Ena......
  • 【LC】2778. 特殊元素平方和
    题目描述:给你一个下标从 1 开始、长度为 n 的整数数组 nums 。对 nums 中的元素 nums[i] 而言,如果 n 能够被 i 整除,即 n%i==0 ,则认为 num[i] 是一个 特殊元素 。返回 nums 中所有 特殊元素 的 平方和 。示例1:输入:nums=[1,2,3,4]输出:21解......
  • C语言基础之m,n互换位置
    好久不见甚是想念,又是一期C语言,上一期C语言博客说我质量低,所以今天多说一些废话m.n换位,要借助第三方tt=m把m的值赋给tm=n 把n的值赋给mn=t 把t的值赋给m#include<stdio.h>#include<stdlib.h>intmain(){intm,n;printf("输入两个整数值:");scanf("%d......
  • [题解](更新中)[test06]2024/11/23 模拟赛 / 2023牛客OI赛前集训营-提高组(第三场) A~C
    原题页面:https://ac.nowcoder.com/acm/contest/65194Statements&Solution:https://www.luogu.com.cn/problem/U507978\(80+80+50+24=234\)。A贪心+双指针。根据贪心思想,大值选大、小值选小。我们按绝对值从大到小给\(a\)排序,再按从小到大给\(b\)排序,取双指针\(l=1,r=m\)......
  • Windows注册表之注册表基本操作
    Windows注册表之注册表基本操作一、**基本操作**1、**创建、修改和删除键值**二、**导入与导出注册表文件**1、**导出注册表文件**2、**导入注册表文件**三、**搜索与过滤**1、**使用搜索功能定位特定键或值**2、**过滤与排查注册表项**小结本章将详细讲解如何通......
  • 【Solution】用C语言代码绘制线性函数包围图
    题目:绘制左边图的众多*输出图像,函数已给出:y=1,y=-x+2n,y=x。解决方案: 思路对于原来的坐标几何图形,2<=n,y<=x<=2n-y,1<=y<=x。我们用来写C代码的函数首先要确定三角形高的范围,至少要2。将图形分隔成上下两部分。从最高的顶点到三角形高的部分,和其下面的部分。使用line......
  • Springboot多用户博客管理系统的设计与实现0ce8q(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,博客文章,博文分类开题报告内容一、研究背景随着互联网技术的飞速发展,博客作为一种个人或团体表达思想、分享知识的平台,已经深入到了人们的日常生活中。博......
  • COCI2021-2022#4 Šarenlist
    luogu。问题描述:有\(k\)种颜色对一棵树的所有边进行染色,给定\(m\)条限制,每条限制要求\(u,v\)路径上的所有边至少有两种颜色,问染色的方案总数。注意到数据范围:\(m\le15\),明显的一个经典容斥。如何求钦定一些路径颜色全部相同的方案数?对于要求颜色相同的边用并查集并起来,......