C# 如何实现代码每间隔5分钟循环执行一次?
C# 实现每5分钟循环执行代码的方案
完全可以实现,你可以通过异步循环+延迟等待的逻辑达成需求,因为你的现有代码是异步结构,推荐使用Task.Delay实现非阻塞等待,避免浪费线程资源。
修改后的完整代码
using System; using System.Net.Http; using System.Threading.Tasks; namespace GetRespond { class Program { // HttpClient声明为静态全局复用,避免频繁创建销毁的资源消耗 private static readonly HttpClient client = new HttpClient(); // 定义间隔时间,5分钟对应毫秒数为 5*60*1000 = 300000 private const int IntervalMilliseconds = 300000; static async Task Main(string[] args) { Console.WriteLine("程序启动,将每5分钟请求一次目标地址"); // 死循环实现永久重复执行 while (true) { try { await GetTodoItems(); } catch (Exception ex) { // 异常捕获避免单次请求失败导致整个程序崩溃 Console.WriteLine($"执行出错:{ex.Message}"); } // 等待指定间隔时间后再执行下一次 await Task.Delay(IntervalMilliseconds); } } private static async Task GetTodoItems() { string response = await client.GetStringAsync("MY_WEBSITE_URL"); Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] 请求响应:{response}"); } } }
核心修改说明
- 新增
while(true)死循环包裹业务逻辑,实现永久重复执行 - 使用
Task.Delay(300000)实现5分钟的异步等待,不会阻塞主线程,比同步的Thread.Sleep更适配异步代码场景 - 将
HttpClient调整为静态全局实例,这是C#使用HttpClient的官方推荐实践,可避免频繁创建销毁实例导致的套接字资源耗尽问题 - 新增异常捕获逻辑,避免单次网络请求超时、失败等异常直接导致整个程序崩溃
- 新增时间戳打印,方便核对每次请求的执行时间
可选调整建议
- 如果需要可手动终止程序运行,可在循环中添加终止判断逻辑,比如检测控制台输入、读取配置开关等
- 5分钟的间隔时长可通过修改
IntervalMilliseconds常量的数值自由调整
内容的提问来源于stack exchange,提问作者Depotys
相关产品推荐
相关产品推荐

