当您使用Task.Run太多而导致线程池耗尽时会发生什么?

迈克尔·巴洛尼

我有一个.NET Windows服务,该服务使用BeginRead / EndRead异步I / O范例实现套接字服务器。现在,此套接字代码需要调用一些异步/任务/等待异步代码。

我一直在使用Nito.AsyncEx库的AsyncContext类的Run方法,但是对于从EndRead调用是否会阻塞并保留工作线程为人质,我持保留态度。我对之前的问题的建议是使用Task.Run而不是Nito.AsyncEx的AsyncContext.Run。这会将调用提交到异步/等待代码中,并立即返回。在我看来,在负载下,客户端没有任何回滚可以阻止请求充斥线程池。

我将重新询问有关Nito.AsyncEx的AsyncContext.Run的原始问题:它是否保留了被调用的线程(调用我套接字的EndRead回调的池线程)为人质,还是在异步I / O时释放了该线程?它的调用发生在后台?

如果Nito.AsyncEx的AsyncContext.Run确实被阻止,那么Task.Run似乎是我唯一的选择。关于如何回滚客户端请求以防止线程池耗尽的任何建议?

斯蒂芬·克莱里

的目的AsyncContext.Run是阻止所有异步操作完成。它确实保留线程,直到发生这种情况。

我建议您重新考虑到目前为止的所有假设:

  1. 您真的需要套接字服务器吗?TCP / IP套接字周围存在大量陷阱。说真的 一个很多人。什么方法可以代替您自托管WebAPI吗?这将是一个很多更容易得到比一个socket服务器的工作。
  2. 为什么需要将工作推送到线程池线程上?End*回调已在线程池线程上调用。
  3. 您确定需要节流吗?没有任何代码可以阻止有足够动机的DoS攻击。

如果您确定确实需要实现自己的TCP / IP服务器,并且无法在回调中同步进行工作,并且确实需要进行限制...则考虑使用Reactive ExtensionsTPL Dataflow这两个库都具有可选的内置限制功能。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当您使用浏览器返回时会发生什么?

来自分类Dev

当您用尽PID时会发生什么?

来自分类Dev

在视觉上,当您使用&符号调用同一进程时会发生什么

来自分类Dev

当您使用多个嵌套作用域时会发生什么?

来自分类Dev

当您使用范围通道中断for语句时会发生什么

来自分类Dev

当您使用jquery更改img标签的src时会发生什么?

来自分类Dev

当您使用“ + =”在Java中“更改”字符串时会发生什么情况?

来自分类Dev

当您使用 select# 作为 css 选择器时会发生什么?

来自分类Dev

当您从《虚无》中抽奖时会发生什么?

来自分类Dev

当您打开/关闭手柄时会发生什么?

来自分类Dev

当您移到非右值参考时会发生什么?

来自分类Dev

当您模糊DOM元素时会发生什么

来自分类Dev

当您“不安装而尝试Ubuntu”时会发生什么?

来自分类Dev

当您调用包含yield的函数时会发生什么?

来自分类Dev

当您从C ++函数返回引用时会发生什么?

来自分类Dev

当您“不安装而尝试Ubuntu”时会发生什么?

来自分类Dev

当您仅实例化“ new objectName()”时会发生什么

来自分类Dev

尝试使用Java捕获-发生异常时会发生什么?

来自分类Dev

异步方法中的Task.Run()导致线程池不足?

来自分类Dev

当您按Esc键退出全屏时会发生什么情况?如何使用按钮复制它?

来自分类Dev

当您使用“ copy / b”命令时,会发生什么?

来自分类Dev

当我使用多个模拟时间时会发生什么?

来自分类Dev

在python中的str上使用encoding时会发生什么?

来自分类Dev

当__aenter __()使用'async with'失败时会发生什么?

来自分类Dev

在AngularJS中删除ngRepeat使用的对象时会发生什么?

来自分类Dev

以管理员身份使用时会发生什么?

来自分类Dev

尝试使用数组变量时会发生什么

来自分类Dev

当我截断正在使用的文件时会发生什么?

来自分类Dev

使用/ noguiboot参数启动系统时会发生什么?

Related 相关文章

  1. 1

    当您使用浏览器返回时会发生什么?

  2. 2

    当您用尽PID时会发生什么?

  3. 3

    在视觉上,当您使用&符号调用同一进程时会发生什么

  4. 4

    当您使用多个嵌套作用域时会发生什么?

  5. 5

    当您使用范围通道中断for语句时会发生什么

  6. 6

    当您使用jquery更改img标签的src时会发生什么?

  7. 7

    当您使用“ + =”在Java中“更改”字符串时会发生什么情况?

  8. 8

    当您使用 select# 作为 css 选择器时会发生什么?

  9. 9

    当您从《虚无》中抽奖时会发生什么?

  10. 10

    当您打开/关闭手柄时会发生什么?

  11. 11

    当您移到非右值参考时会发生什么?

  12. 12

    当您模糊DOM元素时会发生什么

  13. 13

    当您“不安装而尝试Ubuntu”时会发生什么?

  14. 14

    当您调用包含yield的函数时会发生什么?

  15. 15

    当您从C ++函数返回引用时会发生什么?

  16. 16

    当您“不安装而尝试Ubuntu”时会发生什么?

  17. 17

    当您仅实例化“ new objectName()”时会发生什么

  18. 18

    尝试使用Java捕获-发生异常时会发生什么?

  19. 19

    异步方法中的Task.Run()导致线程池不足?

  20. 20

    当您按Esc键退出全屏时会发生什么情况?如何使用按钮复制它?

  21. 21

    当您使用“ copy / b”命令时,会发生什么?

  22. 22

    当我使用多个模拟时间时会发生什么?

  23. 23

    在python中的str上使用encoding时会发生什么?

  24. 24

    当__aenter __()使用'async with'失败时会发生什么?

  25. 25

    在AngularJS中删除ngRepeat使用的对象时会发生什么?

  26. 26

    以管理员身份使用时会发生什么?

  27. 27

    尝试使用数组变量时会发生什么

  28. 28

    当我截断正在使用的文件时会发生什么?

  29. 29

    使用/ noguiboot参数启动系统时会发生什么?

热门标签

归档