gpt4 book ai didi

c# - ThreadPool.QueueUserWorkItem 使用 ASP.Net

转载 作者:行者123 更新时间:2023-12-01 23:43:16 28 4
gpt4 key购买 nike

在Asp.Net中使用“ThreadPool.QueueUserWorkItem”创建巨大的pdf报告,我的要求是必须异步创建报告,并且我不想等待响应。我打算通过下面的代码来实现

protected void Button1_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(report => CreateReport());
}

public void CreateReport()
{
//This method will take 30 seconds to finish it work
}

我的问题是 ThreadPool.QueueUserWorkItem 将从 Asp.Net 工作进程或某些系统线程创建一个新线程。这是一个好方法吗?,我可能有 100 个并发用户访问该网页。

最佳答案

QueueUserWorkItem() 方法利用进程的 ThreadPool它自动管理许多工作线程。这些线程被分配一个任务,运行它们完成,然后返回到线程池以供重用。

由于它托管在 ASP.NET 中,因此 ThreadPool 将属于 ASP.NET 进程。

ThreadPool 非常适合此类工作;因为旋转专用线程的替代方案相对昂贵。但是,您还应该考虑 ThreadPool 的以下限制:

  • ThreadPool 供 .NET 的其他方面使用,并提供有限数量的线程。如果您过度使用它,您的任务可能会被阻止等待其他人完成。这在可伸缩性方面尤其值得关注——但是,它不应该阻止您使用线程池,除非您有理由相信它将成为瓶颈。

  • 必须仔细管理线程池任务,以确保它们被返回以供重用。未处理的异常或从后台线程返回本质上会“泄漏”该线程并阻止其被重用。在这些情况下,线程池可能会有效地丢失其线程并导致进程严重减慢或停止。

  • 分配给线程池的任务应该是短期的。如果您的处理量很大,那么最好为其提供专用线程。

所有这些主题都与一个简单的概念相关,即线程池适用于小型任务,并且它的线程通过重用来为使用代码提供成本节约。您的场景听起来像是使用 ThreadPool 的合理案例——但是您需要仔细地围绕它进行编码,并确保运行实际的负载测试来确定它是否是最佳方法。

关于c# - ThreadPool.QueueUserWorkItem 使用 ASP.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6962877/

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