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

C# URL监控报错:无法将IEnumerable<Task>转为IEnumerable<Task<bool>>

问题原因

你在Select方法中传入的异步lambda表达式没有显式返回布尔值,编译器会自动推断该lambda的返回类型为Task,和你声明的IEnumerable<Task<bool>>类型不匹配,因此触发转换报错。

解决方案

只需要在lambda表达式末尾补上bool类型的返回值即可,修改后的第22行附近代码如下:

IEnumerable<Task<bool>> tasks = args.Select(async url =>
{
    bool result = await ServerStatusByAsync(url);
    urlToStatus.TryAdd(url, result ? "UP" : "DOWN");
    // 新增返回语句,匹配Task<bool>的类型要求
    return result;
});

修改后Task.WhenAll返回的bool[]也能正常拿到所有URL的检测结果,后续统计下线服务器数量的逻辑也可以正常运行。

额外优化建议

不要在每次调用ServerStatusByAsync方法时都新建HttpClient实例,频繁创建销毁会导致套接字资源耗尽,建议将HttpClient改为类级别的静态单例:
在Program类中添加静态字段:

private static readonly HttpClient _httpClient = new HttpClient();

再将ServerStatusByAsync方法内新建HttpClient的代码删除,直接使用_httpClient发起请求即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:36:03