Во-первых, имейте в виду, что вам нужно сделать код, который будет управляемым. Судя по всему, ваши представления и контроллеры должны быть немного более упорядоченными, в противном случае им станет довольно много управлять.
Поэтому я думаю, что вам было бы лучше сделать несколько вещей:
1) Создайте контроллер под названием MY_Controller.php в application / core и расширьте все контроллеры из него (таким образом вы сможете централизовать свои методы )
2) Пользователь для каждого контроллера меню. Поэтому Controller = Menu1 или Menu2
3) Старайтесь, чтобы ваши представления были максимально использованы повторно, чтобы избежать усложнения вещей
В итоге вы должны получить что-то вроде этого:
[110 ]Имейте в виду, что с Codeigniter следующий URL приведет к:
url: menu1/submenu1/param1/param2
Controller
function submenu1($param1,$param2)
Таким образом, нет необходимости получать компоненты URI, поскольку CI будет маршрутизировать их автоматически.
Хотя HttpContext предназначен для обработки контекста, который не является специфичным для потока (поскольку контекст http может начинаться в одном потоке и заканчиваться в другом), он не является поточно-ориентированным. 12128] По сути, проблема в том, что вы делаете что-то, что не предназначено, эти запросы обычно бывают множественными, и у каждого есть свое назначенное HttpApplication для выполнения запроса, и у каждого есть свой собственный HttpContext.
Я действительно попытался бы разрешить инфраструктура asp.net сама делегирует запросы.
Ваши коллеги правы, если один поток блокирует ресурс, а другой пытается его использовать, то ваш пул потоков выходит бум! Не очень хороший результат. Большинство людей решают эту проблему, создавая новые объекты и передавая их в параматизированные потоки. Если вам абсолютно необходимо использовать один и тот же объект, вы должны реализовать некоторый код, который сначала проверяет, используется ли ресурс другим потоком, а затем немного подождет, прежде чем проверять снова. Примером может быть создание bool IsInUse, который вы всегда проверяете сначала, а затем ваш поток устанавливает его в значение true, если он использует этот ресурс, а затем в false, когда это делается, предотвращая попытки других потоков использовать базовый ресурс (ваш httpContext). , Надеюсь, это поможет.
Поскольку HttpContext является частью библиотеки .Net, я ожидаю, что все статические функции являются поточно-ориентированными, но любые нестатические члены не являются потокобезопасными при вызове одного и того же экземпляра объекта. Поэтому надеюсь, что в следующий раз вы ожидаете, что при совместном использовании экземпляра HttpContext между потоками возникнут проблемы.
Есть ли способ, которым вы можете отделить операции, которые вам необходимо выполнять параллельно, с HttpContext? Если они просто загружают данные и записывают в формат CSV, этот код не имеет необходимой зависимости от пользовательского элемента управления ASP.NET или жизненного цикла страницы. После удаления этой зависимости вы можете реализовать страницу с помощью асинхронного HttpHandler, выполняя параллельные операции во время между IHttpHandler.BeginProcessingRequest () и IHttpHandler.EndProcessingRequest ().