Workflows chain tasks together, accomplishing more complex orchestrations. Common examples are when apps need to authenticate before making a subsequent request - we're able to chain the response of the authentication into the next request.
Just like tasks, workflows may also accept inputs to forward to their tasks' inputs. For example, you could have a workflow of two tasks (each with a single input), but only declare one input in your workflow and forward this value to both tasks.
You may use the collection results of one task as the input(s) to other tasks. This is useful when you need the output of one task to use another task.
It's possible to filter what extracted task values will go on to a subsequent task run within the workflow.