C# 无法从WebAPI进行流式处理

C# 无法从WebAPI进行流式处理,c#,asp.net-web-api,stream,C#,Asp.net Web Api,Stream,我正在尝试从WebAPI端点传输数据(日志消息)。正如其他人所建议的那样,我正在为此目的使用PushStreamContent。然而,流式传输不起作用,我看到的是,标题会立即发送,但整个响应在生成后立即出现(当我运行下面的代码时,30秒后) 这是我的密码: [HttpGet] [Route("notes/problems/create")] public HttpResponseMessage CreateAutoProblems(AutoProb

我正在尝试从WebAPI端点传输数据(日志消息)。正如其他人所建议的那样,我正在为此目的使用
PushStreamContent
。然而,流式传输不起作用,我看到的是,标题会立即发送,但整个响应在生成后立即出现(当我运行下面的代码时,30秒后)

这是我的密码:

        [HttpGet]
        [Route("notes/problems/create")]
        public HttpResponseMessage CreateAutoProblems(AutoProblemsInputModel input) {
            var result = new HttpResponseMessage(HttpStatusCode.OK) {
                Content = new PushStreamContent(async (stream, content, transportContext) => {
                    for (int i = 0; i < 30; i++) {
                        Thread.Sleep(1000);
                        var buffer = Encoding.UTF8.GetBytes(i.ToString() + " ");
                        await stream.WriteAsync(buffer, 0, buffer.Length);
                        stream.Flush();
                    }
                    stream.Close();
                }, "text/plain")
            };
            return result;
        }
[HttpGet]
[路线(“注释/问题/创建”)]
公共HttpResponseMessage CreateAutoProblems(AutoProblemsInputModel输入){
var结果=新的HttpResponseMessage(HttpStatusCode.OK){
内容=新的PushStreamContent(异步(流、内容、传输上下文)=>{
对于(int i=0;i<30;i++){
睡眠(1000);
var buffer=Encoding.UTF8.GetBytes(i.ToString()+);
wait stream.WriteAsync(buffer,0,buffer.Length);
stream.Flush();
}
stream.Close();
}“文本/纯文本”)
};
返回结果;
}

我需要的是,数据每秒发送给客户,而不是一次发送所有数据。

为什么要睡觉?您循环30次,每次循环中有1秒的延迟,每个循环都有30秒的延迟。
Thread.Sleep(1000)删除它,当您想要
异步
支持时,不需要它,也不应该这样做。。。如果您这样做,则
等待任务。延迟(1000)…我正在使用Thread.Sleep,这样我就可以看到服务器正在流式传输,而不是等到最后。如果没有它,服务器响应太快。显然,我的真实代码将有一个不同的延迟,甚至可能是一两分钟。@đěxě341;将其更改为
wait Task.delay(1000),但结果相同,它等待30秒,然后发送所有30个数字。