如何在C#中实现超时机制?5秒未返回值则返回false
实现异步方法5秒超时返回false的解决方案
你可以通过Task.WhenAny结合Task.Delay实现超时控制,当目标方法在指定时间内未完成时直接返回false。修改后的代码如下:
public async Task<bool> InformixTest() { // 同时启动查询任务和5秒延迟任务 var timeoutTask = Task.Delay(5000); var queryTask = _informixService.Reports("SELECT 1"); // 等待最先完成的任务 var completedTask = await Task.WhenAny(queryTask, timeoutTask); // 如果先完成的是延迟任务,说明超时,返回false if (completedTask == timeoutTask) { return false; } // 获取查询结果并判断返回值 string query = await queryTask; return query != null; }
关键说明:
Task.WhenAny会返回最先完成的任务,我们同时监听查询任务和5秒延迟任务,以此判断是否超时。- 若延迟任务先完成,直接返回false,表示超时。
- 若查询任务先完成,再await获取结果(此时任务已完成,不会产生额外阻塞),最后按原逻辑判断返回值。
- 原代码的if-else逻辑可简化为直接返回
query != null,效果完全一致。
内容的提问来源于stack exchange,提问作者Buğra Balcı
相关产品推荐
相关产品推荐

