Here's some things I've learned about Unity.Jobs and Unity.Collections which I consider to be important or useful. Please add your own. You can only .Schedule() or .Run() jobs from the main thread. For an IJob, .Run() runs a job from the main thread and seems to be mostly identical to calling .Execute(). However, if you do something you can't do off the main thread (accessing GameObjects, scheduling jobs), Unity will give an error. This is useful for debugging, as it can provide you with thread safety checks without actually running multiple threads and increasing likelihood of a crash. default(JobHandle) is a valid way to express a non-existent handle. You can (but probably shouldn't) create a temporary NativeArray which points to the contents of a managed array. See code.