加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 00:03:31 所属栏目:asp.Net 来源:网络整理
导读:我正在考虑以下方法,但不确定它是否是最好的出路: step1(服务器端):TaskMangaer类创建一个新线程并启动一个任务. step2(服务器端):将taskManager对象引用存储到缓存中以供将来参考. step3(客户端):使用定期Ajax调用来检查任务的状态. 基本上,目的是建立
我正在考虑以下方法,但不确定它是否是最好的出路:

step1(服务器端):TaskMangaer类创建一个新线程并启动一个任务.
step2(服务器端):将taskManager对象引用存储到缓存中以供将来参考.
step3(客户端):使用定期Ajax调用来检查任务的状态.

基本上,目的是建立一个框架来运行后台任务(约5分钟),并在Web UI上提供有关任务完成百分比的定期反馈.

有没有一个巧妙的方法围绕这个或任何现有的asp.net API有用吗?

编辑1#:我想用应用程序在进程中运行任务.

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

解决方法

我认为将结果存储在缓存中的问题是ASP.NET可能会为了其他目的而清除缓存条目(即,如果它的内存不足,如果它的脾气暴躁等).如果在缓存中找不到缓存,则可以根据需要重新创建缓存中的内容,ASP.NET运行时可以随时转储缓存条目.

徽章讨论中缓存的使用似乎根本不同,在这种情况下,任务是短暂的.缓存只是被用作hacky计时器来定期启动任务.

你能否确认这是一项需要5分钟的任务,并且整个时间都需要自己的线程?这本身就是一个性能问题,如果每个请求都需要自己的线程这么长时间,你将只能支持有限数量的此类请求.只有在可以接受的情况下,我才会让任务阵营长期存在.

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

如果你需要扩展到许多用户,那么我认为你需要将任务分解为异步步骤,我可能会使用数据库表来存储结果(再次按每个请求/用户键入).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读