asp.net web 环境下使用多线程,对象为NULL,容易使IIS 应用程序池崩溃


很多时候需要一个线程异步执行

ThreadPool.QueueUserWorkItem(TryCreateDataAsync, info);

大多数时候我这样异步执行一个任务

在这种情况下
TryCreateAndSaveData 这个方法 里面经常出现错误,致使IIS 应用程序池崩溃

报错提示:this.storeDataList.Add(info.Store, outdata); 对象为null


 void TryCreateDataAsync(object o)
    {
        RequestInfo info = o as RequestInfo;

        //创建并存储缓存
        Store.StoreData outdata = null;

        TryCreateAndSaveData(info, out outdata);
    }

    bool TryCreateAndSaveData(RequestInfo info, out Store.StoreData outdata)
    {
        outdata = CreateData(info);

        if (outdata != null)
        {

            //存入store
            if (outdata.Seconds > 0 && outdata.BodyData.Length >= 0)
            {
                this.storeDataList.Add(info.Store, outdata);
            }

            return true;
        }

        return false;
    }

图片描述

多线程 .net

草惊人生凉 11 years, 10 months ago

如果线程池工作项抛出了一个未处理异常,那么 CLR 将通过正常的未处理异常策略来确定该采取什么操作。在不存在外部宿主的情况下,例如 SQL Server 或者 ASP.NET,进程将崩溃。

《Windows 并发编程指南》

秋月airi answered 11 years, 10 months ago

要看你这个PageCache是怎么实现的了, 如果是用HttpContext那就是不行的。多线程下是获取不到HttpContext的

5856890 answered 11 years, 10 months ago

Your Answer