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

C#定义Task<IEnumerable<PingReply>>返回值时CS0029错误的修正方法

修正C#中Task<IEnumerable>返回值的编译错误

错误原因

  • 异步lambda未返回PingReply结果:Select中的异步lambda没有返回result,导致tasks被推断为IEnumerable<Task>而非IEnumerable<Task<PingReply>>。Task.WhenAll(tasks)执行后返回无返回值的Task,await后得到void,无法转换为IEnumerable<PingReply>,这是CS0029错误的核心原因。
  • 语法错误:SendPingAsync(ip, 1000)末尾多了一个多余的右括号,会引发额外编译问题。

修正步骤

  1. 在异步lambda中添加return result;,让每个异步任务返回对应的PingReply实例,确保tasks类型为IEnumerable<Task<PingReply>>。
  2. 移除SendPingAsync调用末尾多余的右括号,修复语法错误。

修正后的完整代码

private async ValueTask PingMachine() 
{
    var timesToPing = 4;
    var counter = 1;

    while (counter <= timesToPing) {
        var reply = await Pinger(counter);
        counter++;
    }
}

private async Task<IEnumerable<PingReply>> Pinger(int counter)
{
    List<string> addresses = new List<string>();
    if (Check_IP_Correct(TagService.IP_PLC_List)) 
        addresses.Add(TagService.IP_PLC_List);

    var tasks = addresses.Select(async ip =>
    {
        var result = await new Ping().SendPingAsync(ip, 1000);
        TagService.log_PLC.AppendLine($" Pinged {ip} {counter} times time:{result.RoundtripTime} status: {result.Status.ToString()}");
        return result; // 添加返回语句
    });
    return await Task.WhenAll(tasks);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:46:37