需求: 这个是调用微信公众平台碰到的一个问题, 现在有一个页面供别人访问,必须在5秒内给访问的人一个反馈,即便业务逻辑没有处理完成,也要反馈;
我的思路: 收到访问请求后,开启两个线程,一个线程负责处理业务逻辑,一个线程负责计时,如果时间快到了业务逻辑还没有处理完成,那么计时的线程关闭业务逻辑的线程,并执行请求的响应 ,如果顺利,那就是业务逻辑关闭计时线程,并执行请求的响应;多线程了解不够深,求指导代码,,另外,有别的解决办法也可以,谢谢~~多线程微信

解决方案 »

  1.   

    是一个web页面 , 如果开始处理业务逻辑 , 那就必须等业务逻辑处理完成那个才会整个页面响应 
    不过 按照你的提示,我想到另外一个方法了 , 把负责处理业务逻辑的部分单独出去,页面调用业务逻辑的方法,设置4.5秒超时 ,如果超时页面自己回复,不然调用业务逻辑的结果回复 。 
      

  2.   

    他们没有说你的业务,业务交后台怎么做不管,只管你这前台显示和提示,timer控件知道吗?放个timer5秒取值,有值说明处理完了,没值提示超时,提前执行完了停止timer计时,在不明白爱莫能助了-。-
      

  3.   

    可能是我说得不够清除把 ,让几位没有看懂了 。
    第一 不是需要定时刷新页面
    第二 如果把业务方法独立成一个服务出去 ,实际上就是独立的另外的进程了,如果用这个方式,我考虑的是 新建web服务连接和断开服务连接本身就要消耗时间资源,本来处理的时间急很有限,不想浪费 
    这样把 只求多线程如何实现 。 不要说timmer了。。 求能看明白的 我水平太低了还是咋滴
      
      

  4.   

    使用Thread.Join(TimeSpan)方法看看,就是Join之后需要等待子线程完成/超时。
        public static void Main() 
        {
            Thread newThread = 
                new Thread(new ThreadStart(Work));
            newThread.Start();        TimeSpan waitTime = new TimeSpan(0, 0, 5);        if(newThread.Join(waitTime))
            {
                Console.WriteLine("New thread terminated.");
            }
            else
            {
                Console.WriteLine("Join timed out.");
            }
        }    static void Work()
        {
            //业务逻辑
            Thread.Sleep(waitTime);
        }
      

  5.   


    谢谢 测试可行关于 join 子线程 newthread 超时的时候,我看了下状态是 waitsleepjoin,是否需要自己把这个进程释放不 ?会不会一直占用资源啊?
      

  6.   

    提些看法,对与你这样设置网页强制超时不太认同,如果访问量稍微多些,直接爆了服务器。最后你会发现,连最简单的数都取不出来,消息队列中全是无用的线程,而且他们的结果往往都是告诉客户已知的结果——没响应。建议在客户等待时放个进度条,事实证明,一个进度条可以让人高兴的等上一小时,起码装.NET时候是这样。如果业务逻辑很复杂,你可以考虑异步实现,等待的时候可以让用户先做些其他业务,比如先去打个鸟再回来,这样也会获得不错的用户体验。