Instead of every tick task being either totally asynchronous or asynchronous with a chunk lock, tick tasks are sorted into World & Entity groups. World tick tasks are always completed before async Entity tasks. Both need to be complete before the next tick can begin.
Instances of ISerDesPool don't automatically assume asynchronicity. Instead, the default behavior is to run synchronously on the main thread with the ability to multithread passed into the serialise function.
Changed WHITELIST and BLACKLIST to ALWAYS_ASYNC and FILTERED internally. This makes more sense for filters that support more than one type of operation.
Improved awareness of what's being run. If a tick task gets stuck for more than a second (20 ticks worth of time), the game logs it to console.
Added an option to automatically continue after 1 second. This makes things very unstable, but could help diagnose issues.
Completely re-did how ticks are synchronized:
serialise
function.WHITELIST
andBLACKLIST
toALWAYS_ASYNC
andFILTERED
internally. This makes more sense for filters that support more than one type of operation.