当前位置: 首页 > news >正文

企业网站源码带支付上海专业做网站

企业网站源码带支付,上海专业做网站,做公司网站需要什么手续,网站建设 发票 体现如果有些任务需要在后台自动执行,且时不时需要添加一个任务,且按照优先级顺序执行,那么可以参考本文的方法。 后台任务类 定义一个后台任务类BackgroundTaskThread,其中Start方法是用来启动任务的,循环查询是否有添加…

如果有些任务需要在后台自动执行,且时不时需要添加一个任务,且按照优先级顺序执行,那么可以参考本文的方法。

后台任务类

定义一个后台任务类BackgroundTaskThread,其中Start方法是用来启动任务的,循环查询是否有添加任务,外部一般就调用AppendTask来添加任务。循环任务发现任务有添加后,会自动执行。如果有多个任务,会按加入的顺序一个一个执行。

public class BackgroundTaskThread
{/// <summary>/// 任务列表/// </summary>private List<TaskItem> TaskItems = new List<TaskItem>();/// <summary>/// 等待时间/// </summary>public int MillSeconds = 1000;/// <summary>/// 自动重置/// </summary>public AutoResetEvent TaskSet = new AutoResetEvent(false);/// <summary>/// 任务取消标识/// </summary>public CancellationTokenSource Source { get; set; } = new CancellationTokenSource();/// <summary>/// 日志/// </summary>public ILog Log { get; set; }/// <summary>/// 线程数量/// </summary>public int ThreadNum { get; private set; }/// <summary>/// 任务线程/// </summary>public List<Task> TaskThreads = new List<Task>();/// <summary>/// 启动/// </summary>/// <param name="taskTimeSpan">任务扫描间隔</param>/// <param name="taskNum">任务数量</param>public void Start(int taskTimeSpan, int taskNum){ThreadNum = taskNum;for (int i = 0; i < taskNum; i++){MillSeconds = taskTimeSpan;Task task = new Task(BackgroundThread);task.Start();TaskThreads.Add(task);}}/// <summary>/// 后台任务/// </summary>private void BackgroundThread(){try{while (!Source.Token.IsCancellationRequested){var item = GetOrSetTaskItem(true, null);if(item == null){TaskSet.WaitOne(MillSeconds);}else{try{item.Task.Invoke(item.Param);}catch (Exception ex){Log.error("任务 : ", item.Name, " 异常停止.,..", ex);}}}}catch (Exception ex){Log.error("后台任务线程异常退出....", ex);}}/// <summary>/// 读取或者/// </summary>/// <param name="isGet">是否是获取</param>/// <param name="item">任务项</param>/// <returns></returns>protected TaskItem GetOrSetTaskItem(bool isGet, TaskItem item){lock (this){if (isGet){if (TaskItems.Count == 0)return null;item = TaskItems[0];TaskItems.RemoveAt(0);return item;}else{TaskItems.Add(item);return item;}}}/// <summary>/// 追加任务/// </summary>/// <param name="task"></param>/// <param name="param"></param>public void AppendTask(Action<object> task, object param){GetOrSetTaskItem(false, new TaskItem() { Task = task, Param = param });TaskSet.Set();}/// <summary>/// 释放/// </summary>public void Dispose(){if(TaskThreads.Count > 0)Source.Cancel();TaskItems.Clear();}
}

内部任务定义类

public class TaskItem
{/// <summary>/// 任务/// </summary>public Action<object> Task { get; set; }/// <summary>/// 参数/// </summary>public object Param { get; set; }/// <summary>/// 任务名称/// </summary>public string Name { get; set; } = string.Empty;
}

实际任务

public class DoSomethingTaskThread : BackgroundTaskThread
{public void AppendSomething(object data){AppendTask(DoSomething, data);}private void DoSomething(object data){//TODO}
}

外部调用

当然,最好把DoSomethingTaskThread这个子类做成单例,后面直接

//启动任务,同步的话线程数传1,异步的话线程数可以传多点
DoSomethingTaskThread.Start(1000,1);//添加任务
DoSomethingTaskThread.AppendSomething(new object());
http://www.bjxfkj.com.cn/article/102684.html

相关文章:

  • 关于做网站常见的问题北京口碑最好的it培训机构
  • 湘潭seo优化价格天津抖音seo
  • 建设网站的安全性介绍阿里云com域名注册
  • 网站建设公司利润怎么样新乡网络推广外包
  • 怎么用PS做珠宝网站百度seo搜索营销新视角
  • 成品网站软件大全下载营销网站建设哪家好
  • 制作网站网页设计市场推广策略 包括哪些
  • 直播秀场网站开发企业邮箱如何申请注册
  • 自己做的网站可以有多个前端吗凡科网免费建站
  • 备案网站用户名是什么seo常用优化技巧
  • 一条龙做网站做电商一个月能挣多少钱
  • 番禺外贸网站建设网络营销活动策划方案
  • 英文域名在哪个网站查询武汉seo推广
  • 个人建网站一般多少钱线上平台推广方式
  • 北京网站建设招聘seo是什么的缩写
  • 青岛哪里有做网站的怎么自己创建一个网页
  • 在哪里找人做公司网站企业网络
  • 做译员的网站aso优化平台有哪些
  • 龙江手机网站建设常用的关键词有哪些
  • 怎样用dw做网站导航条搜索引擎优化是什么意思
  • 永辉企业微信app下载安装优化网站哪个好
  • wordpress 获取logo中山seo排名
  • 南京网站建设流程班级优化大师官方免费下载
  • ecs怎么做网站杭州seo推广排名稳定
  • 河西网站建设优化seo网站推广策略有哪些
  • 在网站上发消息做宣传自学seo大概需要多久
  • 小型服务器做网站315影视行业
  • 网站建设拍金手指谷哥14济南网站优化排名推广
  • h5个人网站模板源码做网络推广的网站有哪些
  • 景县网站建设百度推广退款电话