web使用ThreadPool,浏览器不需要等待而操作其他页面?

时间:2022-01-11 13:39:06
现在手上一个项目,需要使用web实现自动编译程序,根据文件大小编译一次时间不同,需要实现后台同时多个程序同时进行编译,并且web页面上能显示正在编译的进度。
现在遇到这样些问题:
方案1问题.使用ThreadPool启动编译,如果同时执行两三个,可以正常结束。如果同时执行8个左右,就会报异常,提示“正在中止线程”。(是否是因为主线程已经结束,子线程会跟着结束?如果是,只编译两三个的时候又不会出现这个问题。)
方案2问题.直接将信息发送到webservice执行,在webservice启动多线程。但是浏览器会在等待webservice返回值后才能操作其他页面。
有什么好方法实现我要的效果呢?求助各位大侠!
PS:我用的是mvc3模式,c#语言。

4 个解决方案

#1


你是不是在代码中调用Thread.Abort()了。

#2


没有调用Thread.Abort()。

#3


我在Controller里面的写法如下:
public string Exec()
{
   //获取执行的对象
   ......
   //编译
   for(int i;i<num;++i){ new Thread(new ThreadStart(事件)).Start(); }
   return result;


js中调用
function selectExecPack(currentData) {
    $.ajax({
        url: "/Project/Exec"
           , type: 'POST'
           , data: currentData
           , async: true
           , error: function (result) {
           }
           , success: function (result) {
               //.....
               }
           }
    });
}

#4


OK了,使用webservice 的 Begin....

#1


你是不是在代码中调用Thread.Abort()了。

#2


没有调用Thread.Abort()。

#3


我在Controller里面的写法如下:
public string Exec()
{
   //获取执行的对象
   ......
   //编译
   for(int i;i<num;++i){ new Thread(new ThreadStart(事件)).Start(); }
   return result;


js中调用
function selectExecPack(currentData) {
    $.ajax({
        url: "/Project/Exec"
           , type: 'POST'
           , data: currentData
           , async: true
           , error: function (result) {
           }
           , success: function (result) {
               //.....
               }
           }
    });
}

#4


OK了,使用webservice 的 Begin....