执行1000多个HTTP请求任务失败

邓肯

我正在尝试对API进行负载测试。我同时执行一个任务,每个任务执行一个HTTP请求。Task.WhenAll(mytasks)用于等待所有任务完成。请求如下所示:

using (var response = await client.SendAsync(request).ConfigureAwait(false))
{
    using (var jsonResponse = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
    {
        var jsonSerializer = new DataContractJsonSerializer(typeof(Borders));
        var borders = (Borders)jsonSerializer.ReadObject(jsonResponse);
        return borders;
    }
}

至少可以处理多达数千个任务。但是,如果我开始更多,那么就会遇到几千个任务HttpRequestExceptions

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
   at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
   --- End of inner exception stack trace ---
   at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at BusinessLogic.<GetBorder>d__6d.MoveNext() in c:\BusinessLogic.cs:line 757

所以我的问题是:为什么会发生这种情况(有1000多个任务)?我该如何预防?我显然可以将任务块切成小于1000的块,但我想将其留给底层系统...

usr

我想把它留给底层系统...

那不是一个好主意。.NET Framework在确定IO的最佳并行度方面的能力为零。

并行发出许多请求通常不是一个好主意,因为在此之前强调的资源可能在此之前已用完。显然,后端服务器无法处理这种程度的并行性。它会根据消息强行切断您的联系。

仅仅因为我们现在有了简单的异步IO,await并不意味着您可以通过1000个并行请求来向您的资源发送垃圾邮件。

使用一种常见的解决方案来执行一系列具有一定并行度的异步操作。我喜欢http://blogs.msdn.com/b/pfxteam/archive/2012/03/05/10278165.aspx,但也有基于的解决方案ActionBlock

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

执行超过1000个HTTP请求任务失败

来自分类Dev

NodeJS Async - 即使某些请求失败,也继续执行多个 http 请求

来自分类Dev

HTTP Post请求未成功执行或失败

来自分类Dev

任务':packageAllDebugClassesForMultiDex'的执行失败

来自分类Dev

执行失败的任务“:compileDebugJavaWithJavac

来自分类Dev

任务':compileJava'的执行失败

来自分类Dev

任务执行失败:compileDebugJavaWithJavac

来自分类Dev

任务 ':prepareDebugDependencies' 执行失败

来自分类Dev

同步执行多个任务

来自分类Dev

同步执行多个任务

来自分类Dev

错误:任务':app:processDebugManifest'的执行失败。清单合并失败,出现多个错误,请参阅日志

来自分类Dev

任务':app:compileDebugKotlin'的执行失败

来自分类Dev

Ansible:对任务失败执行清理

来自分类Dev

任务':app:shrinkReleaseMultiDexComponents'的执行失败

来自分类Dev

错误:任务执行失败:ransformException

来自分类常见问题

Gradle:任务':processDebugManifest'的执行失败

来自分类Dev

Android:任务“:dexDebug”的执行失败

来自分类Dev

任务执行失败:':app:preDexDebug'

来自分类Dev

Gradle:执行任务失败

来自分类Dev

任务':app:buildNative'的执行失败

来自分类Dev

任务“ app:transformClassesWithInstantRunForDebug的执行失败

来自分类Dev

任务:app:transformClassesWithJarMergingForDebug的执行失败

来自分类Dev

任务':app:signingConfigWriterDebug'的执行失败

来自分类Dev

任务':app:buildNative'的执行失败

来自分类Dev

任务':app:ProcessDebugGoogleService'执行失败

来自分类Dev

任务 ':app:transformClassesAndResourcesWithProguardForXXXRelease' 执行失败

来自分类Dev

任务 ':app:processDebugManifest' 执行失败

来自分类Dev

任务 ':app:processDebugManifest 执行失败

来自分类Dev

任务 ':app:transformClassesWithInstantRunForClientDebug' 执行失败

Related 相关文章

  1. 1

    执行超过1000个HTTP请求任务失败

  2. 2

    NodeJS Async - 即使某些请求失败,也继续执行多个 http 请求

  3. 3

    HTTP Post请求未成功执行或失败

  4. 4

    任务':packageAllDebugClassesForMultiDex'的执行失败

  5. 5

    执行失败的任务“:compileDebugJavaWithJavac

  6. 6

    任务':compileJava'的执行失败

  7. 7

    任务执行失败:compileDebugJavaWithJavac

  8. 8

    任务 ':prepareDebugDependencies' 执行失败

  9. 9

    同步执行多个任务

  10. 10

    同步执行多个任务

  11. 11

    错误:任务':app:processDebugManifest'的执行失败。清单合并失败,出现多个错误,请参阅日志

  12. 12

    任务':app:compileDebugKotlin'的执行失败

  13. 13

    Ansible:对任务失败执行清理

  14. 14

    任务':app:shrinkReleaseMultiDexComponents'的执行失败

  15. 15

    错误:任务执行失败:ransformException

  16. 16

    Gradle:任务':processDebugManifest'的执行失败

  17. 17

    Android:任务“:dexDebug”的执行失败

  18. 18

    任务执行失败:':app:preDexDebug'

  19. 19

    Gradle:执行任务失败

  20. 20

    任务':app:buildNative'的执行失败

  21. 21

    任务“ app:transformClassesWithInstantRunForDebug的执行失败

  22. 22

    任务:app:transformClassesWithJarMergingForDebug的执行失败

  23. 23

    任务':app:signingConfigWriterDebug'的执行失败

  24. 24

    任务':app:buildNative'的执行失败

  25. 25

    任务':app:ProcessDebugGoogleService'执行失败

  26. 26

    任务 ':app:transformClassesAndResourcesWithProguardForXXXRelease' 执行失败

  27. 27

    任务 ':app:processDebugManifest' 执行失败

  28. 28

    任务 ':app:processDebugManifest 执行失败

  29. 29

    任务 ':app:transformClassesWithInstantRunForClientDebug' 执行失败

热门标签

归档