Here's a diagram showing the life cycle of a job:
By default, a job is started as soon as it's created. This happens both when the job is created with launch() and when it's done with Job(). As we will see in a bit, it's possible to create a job without starting it.
There are five states in the diagram:
- New: A job that exists but is not executing yet.
- Active: A job that is running. A suspended job is also considered active.
- Completed: When the job is not executing any longer.
- Cancelling: When cancel() is called on a Job that is active, it may require time for the cancellation to complete. This is an intermediate state between Active and Cancelled.
- Cancelled: A job that has completed its execution due to cancellation. Note that a Cancelled job can be considered Completed too.
Note that if cancel() is called in a job in the New state, it will not go through the Cancelling state. It will directly go to Cancelled.