C# .NET 4.5.1 Web API: 使用 Event Stream 异步返回 Stream 流
以下是一个示例代码,可以将接收到的 Stream 流以 Event Stream 返回给客户端,并且使用异步处理:
public async Task<HttpResponseMessage> GetStream()
{
var response = new HttpResponseMessage();
response.Content = new PushStreamContent(async (stream, content, context) =>
{
// 异步处理代码
await ProcessStream(stream);
stream.Close();
}, 'text/event-stream');
return response;
}
private async Task ProcessStream(Stream stream)
{
// 从某个来源获取 Stream 流
var input = await GetInputFromSomewhereAsync();
// 读取 Stream 流并发送给客户端
using (var reader = new StreamReader(input))
{
while (!reader.EndOfStream)
{
var line = await reader.ReadLineAsync();
var data = 'data: ' + line + '\n\n';
var bytes = Encoding.UTF8.GetBytes(data);
await stream.WriteAsync(bytes, 0, bytes.Length);
await stream.FlushAsync();
}
}
}
上面的代码中,我们使用 PushStreamContent 来创建一个响应内容,这个内容可以向客户端推送数据流。在这个响应内容的构造函数中,我们传入一个异步方法,这个方法会在响应内容发送给客户端时被调用。在这个方法中,我们可以获取 Stream 流并进行处理。在处理过程中,我们可以将读取到的数据发送给客户端,以实现 Event Stream 的效果。注意,我们在发送数据时,需要加上一些 Event Stream 的标记,例如 'data:' 和 '\n\n'。最后,我们需要关闭 Stream 流以释放资源。
原文地址: https://www.cveoy.top/t/topic/mkEG 著作权归作者所有。请勿转载和采集!