后台-插件-广告管理-内容页广告位一(手机)

您现在的位置是:首页 > 开发类 > 问答问答

关于异步编程的问题请教

2021-07-06 20:33:08问答人已围观

简介 在学习异步编程时,想到一个问题,假如我使用BeginInvoke调用了一个方法,这个方法很耗时,或者是线程池满员,它一直在队列中待着了,我等不了它的结果了。有这样的方法吗

在学习异步编程时,想到一个问题,假如我使用BeginInvoke调用了一个方法,这个方法很耗时,或者是线程池满员,它一直在队列中待着了,我等不了它的结果了。有这样的方法吗,设置个时间,比如超过1分钟我就不再等了。

还有一个问题是被异步调用了,方法在线程池里肯定会执行是吧,除非这个线程出了点什么事,当像出现我前面的那种超时不想等了的情况,可能过几分钟轮到它了,还是会执行,没法取消。

最佳答案:目前还没有任何方式可以取消一个未完成的异步操作。因为它实现起来非常困难。 当然,你也可以实现一个 IAsyncResult 接口的对象,并提供取消方法。这种情况下,可以取消操作。但请谨慎仔细的实现它,保证取消操作不会引发问题。 非常耗时的操作应当使用单独的线程来完成,这样不但比异步方式更加灵活,而且更加高效,实现取消操作也比异步容易的多。 假如使用异步编程,线程池满员后,仍然有异步操作,这时会发生死锁。 一旦异步调用,即 BeginXXX() 方法,方法并不一定在线程池里执行。大概有以下几种执行情况: 1.线程池中的线程。 2.内核线程,或者说驱动层线程。 3.Windows 窗口异步消息。 4.跨网络通信。 诸如此类,也是异步操作取消实现困难的原因所在。

文章来源:https://q.cnblogs.com/q/2701/

Tags:.net技术 c 

很赞哦! ()

后台-插件-广告管理-内容页广告位二(手机)

相关文章

后台-插件-广告管理-内容页广告位三(手机)
后台-插件-广告管理-内容页广告位四(手机)

文章评论

留言与评论(共有 0 条评论)
   
验证码:

本栏推荐

站点信息

  • 文章统计90252篇文章
  • 浏览统计10087次浏览
  • 评论统计1个评论
  • 标签管理标签云
  • 统计数据:统计代码
  • 微信公众号:扫描二维码,关注我们