According to docs if you do an async load on a reference from TSoftObjectPtr the resulting reference is guaranteed only upto the point the delegate is executed.
However this means that you need to store that soft/weak reference to a hard reference if you want it to persist past the delegate call or cache it for later use.
The obvious downside is that you now have to maintain two variables one the TSoftObjectPtr reference that was used to assign that asset reference and then another hard reference (UPROPERTY or Shared ptr) to actually keep it safe after its loaded. This might not be ideal and causes problems with naming conventions of variables
Is there a way to keep the TSoftObjectPtr loaded persistently and avoid using a second variable as hard reference ?