net core 异步超时取消机制
方法一:
利用Task.WhenAny
namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); CancellationTokenSource cts = new CancellationTokenSource(); Task taskMethod1 = Method1(cts.Token); Task taskComplete = Task.WhenAny(taskMethod1, Task.Delay(100, cts.Token)); if (taskComplete != taskMethod1) //超时 { cts.Cancel(); } Console.WriteLine("end"); Console.ReadLine(); } public static async Task Method1(CancellationToken token) { Console.WriteLine("Method1 start"); await Task.Delay(1000, token); Console.WriteLine("Method1 end"); } public static async Task Method2(CancellationToken token) { await Task.Delay(2000, token); Console.WriteLine("Method2"); } } }
方法二:
.WaitAsync
namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); Demo(); Console.WriteLine("end"); Console.ReadLine(); } public static async Task Demo() { CancellationTokenSource cts = new CancellationTokenSource(); try { await Method2(cts.Token).WaitAsync(TimeSpan.FromSeconds(1)); } catch (Exception ex) { Console.WriteLine("timeout"); cts.Cancel(); } } public static async Task Method1(CancellationToken token) { Console.WriteLine("Method1 start"); await Task.Delay(1000, token); Console.WriteLine("Method1 end"); } public static async Task Method2(CancellationToken token) { try { await Task.Delay(5000, token); Console.WriteLine("Method2"); } catch (Exception ex) { Console.WriteLine($"{ex.Message}"); } } public static async Task Method3() { await Task.Delay(2000); Console.WriteLine("Method2"); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构