Physics - Async Ticking Crash

I just confirmed it and its still there in 5.4.2 in a fresh demo project. (I tested it in 5.5, that also crashed, but with a different callstack, not sure if its the same).

5.4 crash callstack (this is the actual crash im facing with my project):

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION 0x000000c4000000a6

UnrealEditor_Engine!FAsyncPhysicsTickCallback::OnPreSimulate_Internal() [Engine\Source\Runtime\Engine\Private\PhysicsEngine\Experimental\PhysScene_Chaos.cpp:212]
UnrealEditor_Chaos!Chaos::FPhysicsSolverBase::ApplyCallbacks_Internal() [Engine\Source\Runtime\Experimental\Chaos\Public\Chaos\Framework\PhysicsSolverBase.h:577]
UnrealEditor_Chaos!Chaos::FPBDRigidsSolver::ApplyCallbacks_Internal() [Engine\Source\Runtime\Experimental\Chaos\Private\PBDRigidsSolver.cpp:784]
UnrealEditor_Chaos!Chaos::FPhysicsSolverFrozenGTPreSimCallbacks::GTPreSimCallbacks() [Engine\Source\Runtime\Experimental\Chaos\Private\Chaos\Framework\PhysicsSolverBase.cpp:134]
UnrealEditor_Chaos!TGraphTask<Chaos::FPhysicsSolverFrozenGTPreSimCallbacks>::ExecuteTask() [Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:1235]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksNamedThread() [Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:760]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:651]
UnrealEditor_Core!FTaskGraphCompatibilityImplementation::WaitUntilTasksComplete() [Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:2122]
UnrealEditor_Engine!FTickTaskSequencer::ReleaseTickGroup() [Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:556]
UnrealEditor_Engine!FTickTaskManager::RunTickGroup() [Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:1583]
UnrealEditor_Engine!UWorld::RunTickGroup() [Engine\Source\Runtime\Engine\Private\LevelTick.cpp:772]
UnrealEditor_Engine!UWorld::Tick() [Engine\Source\Runtime\Engine\Private\LevelTick.cpp:1521]
UnrealEditor_UnrealEd!UEditorEngine::Tick() [Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:2015]
UnrealEditor_UnrealEd!UUnrealEdEngine::Tick() [Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:550]
UnrealEditor!FEngineLoop::Tick() [Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5921]
UnrealEditor!GuardedMain() [Engine\Source\Runtime\Launch\Private\Launch.cpp:180]
UnrealEditor!GuardedMainWrapper() [Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:118]
UnrealEditor!LaunchWindowsStartup() [Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:258]
UnrealEditor!WinMain() [Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:298]
UnrealEditor!__scrt_common_main_seh() [src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

5.5 crash callstack (im not sure what happened with the lines here):

Assertion failed: Index >= 0 [...\Engine\Source\Runtime\CoreUObject\Public\UObject\UObjectArray.h] [Line: 943] 

UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Chaos
UnrealEditor_Chaos
UnrealEditor_Chaos
UnrealEditor_Chaos
UnrealEditor_Core
UnrealEditor_Core
UnrealEditor_Core
UnrealEditor_Core
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_UnrealEd
UnrealEditor_UnrealEd
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
kernel32
ntdll

To repro:
1 Create new project
2 Make sure world streaming is enabled
3 Create new blueprint actor
4 Add async physics tick with a print “X” node
5 Run console command gc.CollectGarbageEveryFrame 1
6 Add x actor to the level
7 Run Simulate while looking at the actor (print X should appear on screen)
8 Move the camera out so that it unloads → Crash

The bug does not happen if async physics tick or world streaming are disabled.

About actors / components ticking:
I might have a misconception here. There is no such thing as async ticking actor? If an actor is asyn ticking, does that mean that one of its component is async ticking? What happens then if I click the Enable async ticking on an actor?

And yes, it might be GC because debugging it it looks like its a valid address (I see the array element being Invalid Label - Invalid etc.), and can 10/10 repro with gc.CollectGarbageEveryFrame 1.

Unfortunatelly I did not actually find where should the RegisterAllActorTickFunctions call the UnregisterAsyncPhysicsTickActor(this);, that’s why the confusion