首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ASP.Net web应用程序中运行后台任务并获得反馈的最佳方法?

在ASP.Net web应用程序中运行后台任务并获得反馈的最佳方法?
EN

Stack Overflow用户
提问于 2008-12-24 06:03:21
回答 4查看 4.2K关注 0票数 4

我正在考虑以下办法,但不确定这是否最好的出路:

step1 (服务器端):一个TaskMangaer类创建一个新线程并启动一个任务。

step2 (服务器端):将taskManager对象引用存储到缓存中以供将来参考。

step3 (客户端):使用周期性的Ajax调用来检查任务的状态。

基本上,它的意图是有一个框架来运行一个后台任务(5分钟左右),并为完成任务的百分比提供关于web的定期反馈。

在此或现有的asp.net API中是否有一种很好的方法来帮助您呢?

编辑1#:我想用这个应用程序运行-proc中的任务。

编辑2#:看起来就像堆栈溢出上的徽章实现一样,也使用缓存来跟踪后台任务。https://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-24 09:47:45

我认为将结果存储在缓存中的问题是,ASP.NET可能为了其他目的而清除该缓存条目(即内存不足、不稳定等等)。从缓存中提供的内容应该是您可以根据需要重新创建的东西,如果在缓存中找不到它,那么ASP.NET运行时可以随时转储缓存条目。

在警徽讨论中,缓存的使用似乎从根本上不同,在这种情况下,任务是短暂的。缓存只是作为一个黑客计时器来周期性地触发任务。

你能确认这是一个需要5分钟的任务,并且需要它自己的线程吗?这本身就是一个性能问题,如果每个请求都需要自己的线程这么长时间,您将只能支持有限数量的此类请求。如果这是可以接受的,我才会让这个任务持续这么长时间。

如果这些任务可以扎营一个线程,那么我只需继续将结果存储在一个全局字典中。字典的键将与客户端请求/ AJAX回调系列相关联。如果安全性非常重要,则密钥还应该包含用户ID。

如果您需要扩展到许多用户,那么我认为您需要将任务分解为异步步骤,在这种情况下,我可能会使用DB表来存储结果(同样按请求/用户键键)。

票数 1
EN

Stack Overflow用户

发布于 2008-12-24 06:16:33

Microsoft是为您试图解决的方案而构建的:http://www.microsoft.com/windowsserver2003/technologies/msmq/default.mspx也有消息队列支持。希望这能有所帮助。

托马斯

票数 1
EN

Stack Overflow用户

发布于 2008-12-24 07:40:40

其中一种方法是使用应用程序状态。生成工作线程时,将生成的请求ID传递给它,并将其返回给客户端。然后,客户机将在其AJAX调用中将该请求ID传回给服务器。然后,服务器将使用请求ID从应用程序状态获取状态。(辅助线程将根据其状态更新应用程序状态)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/390863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档