使用 Httpclient 进行长轮询

Abh*_*hay 5 c# concurrency multithreading long-polling dotnet-httpclient

我正在使用 .Net 使用一个 REST API (GET) HttpClient。我想用long polling调用这个 API 。

我有几个问题:

  1. 使用长轮询检索数据的最佳方法是什么?
  2. 这是我的用例 - 我的应用程序将通过长轮询来使用这个 api,并根据结果我将在不同的线程上执行一些操作。根据 long poll get 的新响应,我将中止/完成旧线程并再次在新线程上开始操作。如何使用任务实现这一目标?

Den*_*din 6

对于第一个问题,我找到了这个解决方案,效果很好:

var url = "http://your.url";
using (var client = new HttpClient())
{
    client.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    using (var response = await client.SendAsync(
        request, 
        HttpCompletionOption.ResponseHeadersRead))
    {
        using (var body = await response.Content.ReadAsStreamAsync())
        using (var reader = new StreamReader(body))
            while (!reader.EndOfStream)
                Console.WriteLine(reader.ReadLine());
    }
}
Run Code Online (Sandbox Code Playgroud)