一个异步任务的梳理

开篇语略;

 

下图来引出话题:

  

场景:

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

  

需求:

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

设计:

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

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

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

  

实现:(这里简单了解一下用到的方法

  数据的存储:Queue(队列)

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

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

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

  异步的执行:Task(任务)

    Task 是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。

    Task 跟线程不是一对一的关系,有点类似线程池,但 Task 相比线程池有很小的开销和精确的控制。

    强烈推荐:http://www.cnblogs.com/woxpp/p/3928788.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>
    /// 进队列 存入两个ID
    /// </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)
        {
            //取出分解两个ID
            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);

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

        }
    }
}

简单的梳理一下 有什么好的建议或意见都可以提出来!<( ̄▽ ̄)> 哇哈哈…

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

posted @ 2015-06-25 16:01  at小怪兽  阅读(142)  评论(0编辑  收藏  举报