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

.NET6 C#异步调用IPerf3无法实时逐行输出问题排查

解决.NET6中执行iPerf3命令无法实时接收输出的问题

在.NET6的C#应用中异步执行iPerf3命令时,期望实时逐行显示命令输出,但当前程序要等到命令执行完成后才会一次性输出全部内容。命令行直接执行时每秒输出一行,但代码运行后,虽然最终统计到输出是20行,OutputDataReceived事件却要等命令结束约10秒后才触发。

解决方案

问题根源是部分版本的iPerf3不会在输出换行时主动刷新缓冲区,只需在iPerf3的命令参数中添加--forceflush选项强制刷新输出缓冲区即可实现实时接收。

修改后的代码

using System.Diagnostics;

bool complete = false;
int count = 0;
var proc = new Process
{
    EnableRaisingEvents = true,

    StartInfo = new ProcessStartInfo
    {
        FileName = "iperf3.exe",
        // 添加--forceflush参数强制刷新输出缓冲区
        Arguments = $"-c 1.2.3.4 --forceflush",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        CreateNoWindow = true,
    }
};

proc.OutputDataReceived += (s, e) => { Console.WriteLine(e.Data); count++; };
proc.ErrorDataReceived += (s, e) => Console.WriteLine(e.Data);

proc.Exited += (sender, args) =>
{
    complete = true;
};

proc.Start();
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.WaitForExit();
proc.Dispose();
Console.WriteLine($"LineCount:{count}");

效果说明

修改后,OutputDataReceived事件会在iPerf3每输出一行内容时立即触发,实现和命令行直接执行一致的实时逐行输出效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:49:53