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)); // 处理出错
}
}
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)); // 处理出错
}
}
相关文章推荐
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例
- (原创)asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)
- asp.net利用多线程执行长时间的任务http://hi.baidu.com/lanxmail/blog/item/ccd6d5dcb8d65ea0cc1166a7.html
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)
- (原创)asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(二)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)_转
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)、(二)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)-asp.net关注
- asp.net利用多线程执行长时间的任务,在客户端显示进度条
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(二)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(二)_转
- 浅谈利用ASP.NET多线程执行长时间的任务
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(二)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(1,2)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度
- 好东东:asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例