X龙@China .Net 'blog

需要的不仅仅是工作,而是通过努力得来的美好将来。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

asp.net使用多线程执行长时间任务

Posted on 2011-12-02 17:34  X龙  阅读(745)  评论(0编辑  收藏  举报

执行思路:  启动一个新线程,在新线程中执行长时间任务,保存子线程执行进度,用ajax获取执行进度,反馈给用户。

 1. 使用Session保存子线程执行进度。

  注意:1.使用Session保存执行状态时,需要先在主线程中设置Session的值,否则会报错(错误提示 要启用页面SessionState)。

       2. Session必须配置保存在进程中,如果保存在StateServer或SqlServer,将会得不到结果。

2. 使用Cache保存 子线程执行进度。

  使用Cache保存执行状态,可解决使用Session会碰到的两个问题,

  但使用Cache,就只能一个人进行操作,否则,多人操作会只获得最后一个操作用户的执行状态。

 

以下是部分示例代码:

 

 // 主线程
Thread handleThread = new Thread(new ParameterizedThreadStart(this.UpdateData));
            handleThread.Start(saveFile);




/// <summary>
        
/// 处理数据
        
/// </summary>
        
/// <param name="fileSrc">上传的excel文件</param>
        private void UpdateData(object fileSrc)
        {
            if (fileSrc == null)
            {
                return;
            }

            Caching.Set(ProductCacheKey.TB_DATA_UPDATE_STATUS, "1"null, DateTime.Now.AddMinutes(30)); // 处理中

            try
            {
                if (!this.HandData(fileSrc.ToString()))
                {
                    Caching.Set(ProductCacheKey.TB_DATA_UPDATE_STATUS, "0"null, DateTime.Now.AddMinutes(30)); // 处理出错
                    return;
                }

                Caching.Set(ProductCacheKey.TB_DATA_UPDATE_STATUS, "2"null, DateTime.Now.AddMinutes(30)); // 处理完成    
            }
            catch
            {
                Caching.Set(ProductCacheKey.TB_DATA_UPDATE_STATUS, "0"null, DateTime.Now.AddMinutes(30)); // 处理出错
            }
        }

 

点击这里给我发消息http://wp.qq.com/index.html