在C# 8及以上版本中,可以使用IAsyncEnumerable
接口来实现异步流式传输数据。以下是如何从WebAPI发送IAsyncEnumerator
并在客户端通过HttpClient
接收流式数据的步骤和示例代码。
IAsyncEnumerable<T>
,其中T
是要流式传输的数据类型。首先,在服务端创建一个返回IAsyncEnumerable
的控制器方法。
[ApiController]
[Route("api/[controller]")]
public class StreamController : ControllerBase
{
[HttpGet("stream")]
public async IAsyncEnumerable<string> GetStreamData()
{
for (int i = 0; i < 10; i++)
{
await Task.Delay(1000); // 模拟耗时操作
yield return $"Data chunk {i}";
}
}
}
然后,在客户端使用HttpClient
来接收并处理流式数据。
class Program
{
static async Task Main(string[] args)
{
using var client = new HttpClient();
var response = await client.GetAsync("http://localhost:5000/api/stream/stream", HttpCompletionOption.ResponseHeadersRead);
if (response.IsSuccessStatusCode)
{
using var stream = await response.Content.ReadAsStreamAsync();
await foreach (var data in ProcessStreamAsync(stream))
{
Console.WriteLine(data);
}
}
else
{
Console.WriteLine("Failed to get stream data.");
}
}
private static async IAsyncEnumerable<string> ProcessStreamAsync(Stream stream)
{
using var reader = new StreamReader(stream);
while (!reader.EndOfStream)
{
yield return await reader.ReadLineAsync();
}
}
}
通过以上步骤和代码示例,可以在C# 8及以上版本中实现WebAPI的异步流式数据传输。
没有搜到相关的沙龙