gpt4 book ai didi

asp.net - asp.net 中的异步调用

转载 作者:行者123 更新时间:2023-12-04 06:52:25 24 4
gpt4 key购买 nike

在这个sample ,创建了两个线程; BeginInvoke 创建的工作线程和 SendAsync 方法创建的 I/O 完成线程。

但是 another author在他的 UnsafeQueueNativeOverlapped 示例中,不推荐这样做。

我想在 asp.net 页面中使用 SendAsync 或 ...Async,并且我想使用 PageAsyncTask。
但是,它的 BeginEventHandler 要求返回 AsyncResult,而 SendAsync 不返回。

afaik,基于事件的异步模式是最推荐的方式,那么我们如何调用 SendAsync 或任何 ...Async 方法而不创建两个线程并损害性能?

最佳答案

实际上,如果您将 beginIvoke 和 endInvoke 用于委托(delegate)或 ThreadPool.WorkerItem 它不会对您的应用程序产生任何影响,因为它们使用 asp.net 使用的相同线程抛出 iis
所以现在你只有两个解决方案来首先进行异步调用你将编写自己的线程类(但要小心)
第二次使用 PageAsyncTasks(recommended) 这个更安全,它被设计为与 asp.net 完美配合

这与如何以及何时使用 asnyc 任务无关
如果您的进程确实需要很长时间才能完成(因为 IIS 会等到所有进程甚至是 asnyc 进程都完成然后开始渲染),那么您必须使用异步解决方案,而不是它会降低性能

注:

AddOnPreRenderCompleteAsync 和 RegisterAsyncTask 之间有区别
在那里的实现中,它们看起来相同,但在第二个中

  • 您可以访问当前的 http
    背景、模仿、文化和
    个人资料数据等
  • 您可以并行运行许多任务
  • 你有超时事件,你可以
    确定页面中的超时
    属性
  • 你可以调用 RegisterAsyncTask
    在一个请求中多次
    注册几个异步操作
  • 关于asp.net - asp.net 中的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2935297/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com