处理HTTPClient在火灾中忘记执行多个请求

时间:2019-05-04 20:43:55

标签: c# asp.net-web-api httpclient parallel.foreach fire-and-forget

我必须发出多个Http发布请求(几百个或更多),而不要像具有SLA一样等待任何响应。在不等待这些响应的情况下,我需要从Web API发送回响应(在执行提到的多个HTTP请求之前,我从另一个API获取数据并需要返回)。

我环顾四周,发现“发射后忘了”的实现不等待响应。我不确定这样做是否正确,并且由于即时消息返回时无需等待并行触发并忘记请求,HttpClient将如何处置?

HttpClient client = new HttpClient();

var CompositeResponse = client.GetAsync(_SOMEURL);

List<MEDLogresp> sortedmeds =   MEDLogresps.OrderBy(x => x.rxId).ThenBy(y => y.recordActionType);

Task.Run(() => Parallel.ForEach(sortedmeds, ele => clientMED.PostAsync(URL , new StringContent(JsonConvert.SerializeObject(ele), Encoding.UTF8, "application/json"))));

return ResponseMessage(Request.CreateResponse<CompositeResponse>(HttpStatusCode.OK, compositeResponse));

1 个答案:

答案 0 :(得分:0)

  

因为我返回时没有等待平行射击并忘记了   请求,httpclient将如何处置?

您可以在应用程序的生命周期内使用HttpClient的单个共享静态实例,而永远不会Dispose()。同时在多个线程中使用同一HttpClient是安全的。