如何在asp.net中使用多线程及队列,异步处理一个耗时的任务(原创)
最近想在使用.net 的队列处理一些耗时的工作。经过考虑,需要先设计一个类,类中包含一个静态的队列。主要是写队列和读取队列。
public class PaperCalculator
{
// 用于存放需要计算总分的试卷的计算任务的队列
private static Queue<string> _paperQueue; // 用于通知是否有新试卷需要处理的“信号器”
private static ManualResetEvent _hasNew;
// 用于写日志的线程
private static Thread _loggingThread;
static PaperCalculator()
{
_paperQueue = new Queue<string>();
_hasNew = new ManualResetEvent(false); _loggingThread = new Thread(Process);
_loggingThread.IsBackground = true;
_loggingThread.Start(); } // 处理队列中的任务
private static void Process()
{
while (true)
{
// 等待接收信号,阻塞线程。
_hasNew.WaitOne(); // 接收到信号后,重置“信号器”,信号关闭。
_hasNew.Reset();
Calculate(); }
} private static void Calculate()
{
var i = ;
while(_paperQueue.Count <= )
{
File.AppendAllText("d:\\paper-calculate-log.txt", DateTime.Now + ": 空循环-" + i + Environment.NewLine);
_hasNew.Reset();
Thread.Sleep();
}
string paperGuid =_paperQueue.Count>?_paperQueue.Dequeue():"未获取到paperGuid";//从队列的开始出返回一个对象;
File.AppendAllText("d:\\paper-calculate-log.txt", DateTime.Now + ":" + paperGuid + "客观分数计算完成" + "当前队列数目:" + _paperQueue.Count + Environment.NewLine);
_hasNew.Set();
}
static bool isFirst = true; // 公开一个Add方法,用于向队列中添加内容然后供外部调用
public static void Add(string paperGuid)
{
_paperQueue.Enqueue(paperGuid);
if (isFirst)
{
isFirst = false;
_hasNew.Set();
}
}
}
2.添加一个调用的入口:
public class HomeController : Controller
{
public ActionResult Index()
{ Task.Run(() =>
{
for (var i = ; i < ; i++)
{
PaperCalculator.Add(i+"----index-task-sj" + Guid.NewGuid().ToString());
Thread.Sleep();
} }); return View();
}
}
访问Home/Index,页面迅速结束,task的多线程任然继续工作,直到循环500次后结束,或者IIS重启后。
如何在asp.net中使用多线程及队列,异步处理一个耗时的任务(原创)的更多相关文章
- 如何在ASP.Net中实现RSA加密
在我们实际运用中,加密是保证数据安全的重要手段.以前使用ASP时,对数据加密可以使用MD5和SHA1算法,这两种算法虽然快捷有效,但是无法对通过它们加密的密文进行反运算,即是解密.因此需要解密数据的场 ...
- 如何在ASP.NET Core程序启动时运行异步任务(3)
原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...
- 示例 - 如何在ASP.NET中应用Spider Studio生成的DLL?
>> 接前文 "示例 - 如何在Console应用程序中应用SpiderStudio生成的DLL?", 将其运用到ASP.NET中: 1. 创建WebApplicati ...
- (译)如何在ASP.NET中安全使用ViewState
原文:http://www.codeproject.com/Articles/150688/How-to-make-ViewState-secure-in-ASP-NET 介绍 ASP.NET中的Vi ...
- 如何在ASP.NET Core程序启动时运行异步任务(2)
原文:Running async tasks on app startup in ASP.NET Core (Part 2) 作者:Andrew Lock 译者:Lamond Lu 在我的上一篇博客中 ...
- 如何在ASP.NET Core程序启动时运行异步任务(1)
原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目 ...
- 如何在asp.net中获取GridView隐藏列的值?
在阅读本文之前,我获取gridview某行某列的值一般做法是这样的:row.Cells[3].Text.ToString().有点傻瓜呵呵 在Asp.net 2.0中增加了一个新的数据绑定控件:Gri ...
- 如何在Asp.net中备份Access数据库?
public void Create( string mdbPath ) { if( File.Exists(mdbPath) ) //检查数据库是否已存在 { thr ...
- 如何在Asp.Net中使用JQueryEasyUI
JQueryEasyUI的基本信息: 官方下载 官方演示 官方文档 一.jQuery easyUI下载后解压的文件目录如下图: demo:JQueryEasyUI的一些示例页面,在项目使用可以将该目录 ...
随机推荐
- bower安装使用入门详情
bower安装使用入门详情 bower自定义安装:安装bower需要先安装node,npm,git全局安装bower,命令:npm install -g bower进入项目目录下,新建文件1.tx ...
- Eclipse *下载
简单了解,Eclipse是绿色软件,下载下来是个压缩包,只需要解压,加上jdk就可以运行了. 相比MyEclipse而言,它是免费的,后者是收费的.各有侧重吧 有很多人用Eclipse,也有很多人用M ...
- 报错:Unable to load configuration. - action - file:/E:/apache-tomcat-8.0.37/webapps/20161102-struts2-3/WEB-INF/classes/struts.xml:11:73
第一种报错: 严重: Exception starting filter struts2Unable to load configuration. - action - file:/E:/apache ...
- Android主流UI开源库整理(转载)
http://www.jianshu.com/p/47a4a7b99364 标题隐含了两个层面的意思,一个是主流,另一个是UI.主流既通用,一些常规的按钮.Switch.进度条等控件都是通用控件,因此 ...
- cocos2dx loading界面 预加载资源 与 资源释放
预加载图片: 1.CCTextureCache::sharedTextureCache()->addImage("icon.png"); 2.CCTextureCache:: ...
- Windows下使用命令行启动php
E:\xampp\php>php-cgi.exe -b 127.0.0.1:9000 -c php.ini
- js调用java代码返回解决方案
版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 今天封装一个加密标签,遇到一个问题,我需要对页面上的数据调用java后台代码进行解密,而标签里只能通过js获取到数据,所以就遇 ...
- c/c++ 对象内存布局
一.对象内存查看工具 VS 编译器 CL 的一个编译选项可以查看 C++ 类的内存布局,非常有用.使用如下,从开始程序菜单找到 Visual Stdio 2012. 选择 VS 的命令行工具,按如下格 ...
- No.015 3Sum
15. 3Sum Total Accepted: 131800 Total Submissions: 675028 Difficulty: Medium Given an array S of n i ...
- 8,SFDC 管理员篇 - 数据模型 - 公式和验证 2
1, Checkbox 只接受真值或者假值 And(arg1, arg2....)至少两个参数,只有参数都为真时候,才返回真,只要有一个为假,就都为假 例如:AND(DoNotCall, HasOpt ...