[MethodImpl(MethodImplOptions.AggressiveInlining)] // avoid long-lived stack frame in many threads private void RunWorker() { InitializeCulture(); Delegate start = _start; _start = null !; #if FEATURE_OBJCMARSHAL if (AutoreleasePool.EnableAutoreleasePool) { AutoreleasePool.CreateAutoreleasePool(); } #endif if (start is ThreadStart threadStart) { threadStart(); } else { ParameterizedThreadStart parameterizedThreadStart = (ParameterizedThreadStart)start; object?startArg = _startArg; _startArg = null; parameterizedThreadStart(startArg); } #if FEATURE_OBJCMARSHAL // There is no need to wrap this "clean up" code in a finally block since // if an exception is thrown above, the process is going to terminate. // Optimize for the most common case - no exceptions escape a thread. if (AutoreleasePool.EnableAutoreleasePool) { AutoreleasePool.DrainAutoreleasePool(); } #endif }