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;
    }

图片描述

阅读 5.5k
2 个回答

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

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

《Windows 并发编程指南》

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进