码迷,mamicode.com
首页 > 其他好文 > 详细

一个异步任务的梳理

时间:2015-06-25 17:09:05      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

开篇语略;

 

下图来引出话题:

技术分享

场景:

  个人用户投递简历,由于繁多的业务逻辑判断和数据库的不断读取(这里就不用多说了吧),当个人用户单个/批量投递简历的时候,点击投递按钮之后会很长一段时间等待返回结果。

  技术分享

需求:

  提升用户体验,解决点击投递按钮之后的漫长等待,给人一种流畅感,当然不能去掉哪些业务逻辑判断。。

设计:

  将投递简历的数据先存放到内存中(不需要参杂任何业务逻辑判断,单纯的存储起来),直接返回投递提示。

  做一个独立的投递简历方法,把复杂耗时的操作放到这个方法中,然后操作存储起来的数据。

  用异步的方法执行后台任务来调用此方法,执行简历的投递。

  技术分享

实现:

  数据的存储:Queue ([美][kju])

    System.Collections.Queue类表示对象的先进先出集合,存储在 Queue(队列) 中的对象在一端插入,从另一端移除。

    Queue能对集合进行顺序处理(先进先出),能接受null值,并且允许重复的元素.

    先行参考:http://www.cnblogs.com/jiahuafu/archive/2013/01/05/2845640.html

  异步的执行:Task

    先行参考:http://www.cnblogs.com/myshell/archive/2010/03/23/1692059.html

    封装好的Task方法:http://www.cnblogs.com/Googler/archive/2010/06/05/1752213.html

  测试代码:

技术分享
/// <summary>
/// 投递简历队列
/// </summary>
public class PostResumeQueue
{
    private static readonly Queue<string> _pQueue = new Queue<string>();

    /// <summary>
    /// 进队列
    /// </summary>
    /// <param name="resumeId"></param>
    /// <param name="infoId"></param>
    public static void PostResumeToQueue(int resumeId, int infoId)
    {
        _pQueue.Enqueue(string.Format("{0}-{1}", resumeId, infoId));
    }

    /// <summary>
    /// 异步执行任务
    /// </summary>
    /// <returns></returns>
    public static void PostResumeToDbAsync()
    {
        var task = new Task(PostResumeToDb);
        task.Start();
    }

    /// <summary>
    /// 进库
    /// </summary>
    /// <returns></returns>
    public static void PostResumeToDb()
    {
        while (_pQueue.Count != 0)
        {
            var q = _pQueue.Dequeue();
            var qArr = q.Split(-);

            var resumeId = 0;
            int.TryParse(qArr[0], out resumeId);
            var infoId = 0;
            int.TryParse(qArr[1], out infoId);

            //这里 调用/书写 投递简历的方法体{ *** }

        }
    }
}
PostResumeQueue

简单的梳理一下 有什么好的建议或意见都可以提出来  具体内容学习后详细讲解!<( ̄▽ ̄)> 哇哈哈…

参考文章:https://msdn.microsoft.com/zh-cn/library/system.threading.tasks.task.aspx

一个异步任务的梳理

标签:

原文地址:http://www.cnblogs.com/dwmy/p/4600180.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!