不处理异步操作时应在哪里等待?

剃刀

如果我在C#(任务)中启动一组异步操作,则每个操作都会从Web上下载一些内容,然后使用Task.WhenAny()处理第一个可用的Task结果,其他异步操作将在主线程执行时“等待”处理结果?

我只能假设操作系统级别上存在某种内部队列,该队列存储状态以及在后台进行的下载结果。

我的问题是,此队列位于何处,并且该队列是否有尚未处理的异步操作结果溢出的危险?

鼻塞

TPL任务调度跟踪这些任务开始通过Task.RunTask.Factory.StartNewTask.ContinueWithTask.RunTask.RunSynchronously

对于诺言式的任务(使用创建的任务TaskCompletionSource),引用由I / O完成回调或事件处理程序保留。Stephen Cleary在与此类任务相关的博客文章中非常出色

对于编译器生成的状态机任务(那些由内部async带有await语句方法返回的任务),只要它正在等待的任何“内部”任务(或自定义等待者)处于“运行中”状态,该任务就会保持活动状态在这种情况下,继续回调由任务等待者(例如TaskAwaiter保留该编译器生成的回调对环境(“外部”)任务具有很强的间接引用。当“内部”任务完成时,将通过SynchronizationContext.PostTaskScheduler.Current任务调度程序来调度回调(如果在时未捕获到同步上下文await)。

如果使用自定义的等待者,则可能需要牢记await传递给继续回调INotifyCompletion.OnCompleted,以防止环境任务在“进行中”时被垃圾回收。

我的问题是,此队列位于何处,并且该队列是否有尚未处理的异步操作结果溢出的危险?

如果任务排队的速度比完成任务的速度快,从长远来看,您最终可能会耗尽内存。排队论是一个普遍的问题,并不是TPL任务特有的。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

异步操作任务在哪里处理异常?

来自分类Dev

异步操作任务在哪里处理异常?

来自分类Dev

实施IEnlistmentNotification时应在哪里执行操作?

来自分类Dev

使用CursorLoader时应在哪里处理查询结果?

来自分类Dev

不处理 asio 异步操作

来自分类Dev

循环时应在哪里实例化WebDriver实例?

来自分类Dev

编译/运行Java文件时应在哪里放置-cp

来自分类Dev

调用异步函数时在哪里添加错误处理?

来自分类Dev

MVC 4异步操作在等待之间不处理多个请求

来自分类Dev

异步/等待中的return语句在哪里

来自分类Dev

如果未等待,异步任务将在哪里引发异常?

来自分类Dev

C#,异步功能链,在哪里处理异常

来自分类Dev

在哪里放置等待?

来自分类Dev

处理HDFS数据的Kafka使用者应在哪里运行?

来自分类Dev

angular @ngrx-redux我应该在哪里处理不更改状态的操作,例如export

来自分类Dev

在多个程序包中使用缓存时,应在哪里将Cache Connection Manager的CAW文件存储在哪里?

来自分类Dev

在多个程序包中使用缓存时,应在哪里将Cache Connection Manager的CAW文件存储在哪里?

来自分类Dev

true循环时应在哪里添加打印,如何打印所有添加的文本?

来自分类Dev

立即等待异步操作

来自分类Dev

异步模块或处理程序在异步操作仍挂起时完成

来自分类Dev

SendMailAsync:异步模块或处理程序在异步操作仍挂起时完成

来自分类Dev

“等待的”任务在哪里执行?

来自分类Dev

等待代码在哪里运行

来自分类Dev

Python异步:在执行其他操作时等待标准输入

来自分类Dev

django rest framework 3.1在ModelSerializer中处理创建/更新的地方,我应在哪里验证嵌套数据?

来自分类Dev

使用异步/等待时处理节流/速率限制(429错误)

来自分类Dev

当不需要线程池时处理异步/等待

来自分类Dev

异步方法在哪里运行?

来自分类Dev

使用spring-cloud-aws,在连接到RDS实例时,应在哪里指定数据库?

Related 相关文章

  1. 1

    异步操作任务在哪里处理异常?

  2. 2

    异步操作任务在哪里处理异常?

  3. 3

    实施IEnlistmentNotification时应在哪里执行操作?

  4. 4

    使用CursorLoader时应在哪里处理查询结果?

  5. 5

    不处理 asio 异步操作

  6. 6

    循环时应在哪里实例化WebDriver实例?

  7. 7

    编译/运行Java文件时应在哪里放置-cp

  8. 8

    调用异步函数时在哪里添加错误处理?

  9. 9

    MVC 4异步操作在等待之间不处理多个请求

  10. 10

    异步/等待中的return语句在哪里

  11. 11

    如果未等待,异步任务将在哪里引发异常?

  12. 12

    C#,异步功能链,在哪里处理异常

  13. 13

    在哪里放置等待?

  14. 14

    处理HDFS数据的Kafka使用者应在哪里运行?

  15. 15

    angular @ngrx-redux我应该在哪里处理不更改状态的操作,例如export

  16. 16

    在多个程序包中使用缓存时,应在哪里将Cache Connection Manager的CAW文件存储在哪里?

  17. 17

    在多个程序包中使用缓存时,应在哪里将Cache Connection Manager的CAW文件存储在哪里?

  18. 18

    true循环时应在哪里添加打印,如何打印所有添加的文本?

  19. 19

    立即等待异步操作

  20. 20

    异步模块或处理程序在异步操作仍挂起时完成

  21. 21

    SendMailAsync:异步模块或处理程序在异步操作仍挂起时完成

  22. 22

    “等待的”任务在哪里执行?

  23. 23

    等待代码在哪里运行

  24. 24

    Python异步:在执行其他操作时等待标准输入

  25. 25

    django rest framework 3.1在ModelSerializer中处理创建/更新的地方,我应在哪里验证嵌套数据?

  26. 26

    使用异步/等待时处理节流/速率限制(429错误)

  27. 27

    当不需要线程池时处理异步/等待

  28. 28

    异步方法在哪里运行?

  29. 29

    使用spring-cloud-aws,在连接到RDS实例时,应在哪里指定数据库?

热门标签

归档