You are orchestrating a data pipeline in Google Cloud that includes multiple tasks, such as extracting data from Cloud Storage, transforming it in Dataflow, and loading it into BigQuery. Each task depends on the successful completion of the previous task. How would you ensure that each task executes in the correct order and handles failures properly?