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, 9 months ago

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

《Windows 并发编程指南》

秋月airi answered 11 years, 9 months ago

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

5856890 answered 11 years, 9 months ago

Your Answer