您的位置:首页 > 编程语言 > ASP

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

2011-12-02 17:34 295 查看
执行思路: 启动一个新线程,在新线程中执行长时间任务,保存子线程执行进度,用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)); // 处理出错
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐