Exemplo n.º 1
0
 /// <summary>
 /// Call back to add the kernel to the available child kernels
 /// </summary>
 /// <param name="kernelWrapper">The wrapped kernel to mark available</param>
 private void AddFreeChildKernels(IKernelWrapper kernelWrapper)
 {
     lock (this.obj)
     {
         this.availableChildKernels.Enqueue(kernelWrapper);
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Gets a child kernel for event. Child kernels are re-used to help with performance since creating child kernels for every event causes performance issues.
        /// </summary>
        /// <param name="evnt">The event that the kernel will have context of.</param>
        /// <returns>A kernel wrapper that wraps the actual kernel.</returns>
        public IKernelWrapper CreateChildKernel(Event evnt)
        {
            lock (this.obj)
            {
                // Attempt to get an available child kernel to re-use or create a new one if none exist
                IKernelWrapper eventKernelWrapper = null;
                while (eventKernelWrapper == null)
                {
                    eventKernelWrapper = this.availableChildKernels.Any()
                                                ? this.availableChildKernels.Dequeue()
                                                : this.CreateNewChildKernel();
                }

                // Rebind the log context for the current event
                eventKernelWrapper.Kernel.Rebind <ILogContext>().ToConstant(new LogContext(evnt));
                return(eventKernelWrapper);
            }
        }