You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何重复执行异步HTTP GET调用直到按键终止?

异步循环执行HTTP请求直到按键终止的实现方案

你可以通过取消令牌机制实现可控的循环逻辑,不需要复杂的多线程控制,就能做到用户按下任意键时立刻终止请求、退出程序。

核心实现逻辑:

  • 用CancellationTokenSource生成全局取消标记
  • 启动独立的后台任务监听控制台按键,检测到输入时触发取消标记
  • 主逻辑循环判断取消标记状态,未触发时就执行HTTP请求、输出响应内容
  • 所有异步操作(HTTP请求、可选的请求间隔等待)都传入取消令牌,避免程序卡在正在执行的请求上无法退出

修改后的完整可运行代码:

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

namespace Hello 
{
    class Program
    {
        private static readonly HttpClient client = new HttpClient();
        static async Task Main(string[] args)
        {
            // 初始化取消令牌源
            using var cts = new CancellationTokenSource();
            
            // 后台监听按键,按下任意键即触发取消
            _ = Task.Run(() =>
            {
                Console.ReadKey();
                cts.Cancel();
            });

            // 请求头仅需初始化配置一次,无需每次请求重置
            client.DefaultRequestHeaders.Accept.Clear();

            try
            {
                // 循环执行请求,直到收到取消信号
                while (!cts.IsCancellationRequested)
                {
                    // 传入取消令牌,取消信号触发时会自动中断请求
                    var response = await client.GetStringAsync("https://localhost:8080", cts.Token);
                    Console.Write(response);
                    
                    // 如果需要控制请求频率,比如间隔1秒发一次请求,取消下面行的注释即可
                    // await Task.Delay(1000, cts.Token);
                }
            }
            catch (OperationCanceledException)
            {
                // 捕获取消操作触发的异常,正常提示退出
                Console.WriteLine("\n已检测到按键输入,程序停止运行。");
            }
        }
    }
}

几个优化提示:

  • 原代码中把请求头清理配置放在单次请求方法里,循环执行时会重复做无意义的操作,提到循环外初始化一次即可
  • 如果要保留原来的ProcessRepositories方法结构,只需要给方法增加CancellationToken类型的入参,把令牌透传给GetStringAsync方法即可
  • 不要用Thread.Sleep之类的同步等待方法控制请求间隔,会阻塞异步线程,用带取消令牌的Task.Delay才是正确写法

内容的提问来源于stack exchange,提问作者Sanchez82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 15:51:37