httpClient.PostAsync调用WebApi导致 A task was canceled

59從山上下來了 2017-11-10 09:44:48
在一个功能函数中,循环调用下列的POST函数(调用后Sleep 300ms,因为测试中发现接口处理一条一般在200ms以内),发现其请求无法成功,response 返回的都是null。

在开启的线程中运行uploadingLoop,uploadingLoop中的for循环里运行POST
测试时,一个线程去跑uploadingLoop还能成功。实际运行环境下,会有七八个线程在跑uploadingLoop,就不行l了。

报错如下:

System.AggregateException: One or more errors occurred. ---> System.Threading.Tasks.TaskCanceledException: A task was canceled.
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task`1.get_Result()
at Richon.CollectingCore.UploadingService.Post(String requestUri, String content)
---> (Inner Exception #0) System.Threading.Tasks.TaskCanceledException: A task was canceled.<---

One or more errors occurred.
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task`1.get_Result()
at Richon.CollectingCore.UploadingService.Post(String requestUri, String content)




private void uploadingLoop()
{
while (this._running)
{
int count = this._cache.Count;
if (count > 0)
{
for (int i = 0; i < count; i++)
{
var dev = this._cache[i];
if (dev != null && dev.HasEnergyInfo && dev.HasDevicePropertyInfo)
{
using (UploadingService service = new UploadingService())
{
service.Post(ConfigHelper.DeviceAcquire, dev.ToJson());
}
_cache.Remove(dev);
Thread.Sleep(300);
}
}
}
}
}



public void Post(string requestUri, string content)
{
var httpContent = new StringContent(content, Encoding.UTF8, "application/json");

HttpResponseMessage response = null;
try
{
response = this._httpClient.PostAsync(requestUri, httpContent).Result;
}
catch (Exception e)
{
TxtLogger.WriteError(e);
return;
}
}
...全文
670 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧