# Using conditional logic in a Flow
Sometimes you have parts of a flow that you only want to run under certain conditions. To support this, Prefect provides several built-in tasks for control-flow that you can use to add conditional branches to your flow.
# Running a task based on a condition
Let's say you want to have a flow where different tasks are run based on the result of some conditional task. In normal Python code this logic might look like:
if check_condition():
val = action_if_true()
another_action(val)
else:
val = action_if_false()
another_action(val)
To implement the same logic as a Flow, you can make use of Prefect's case
blocks. Tasks added to a flow inside a case block are only run if the
condition matches the case. Tasks in branches that aren't run will finish with
a Skipped state.
The resulting flow looks like:

# Merging branches in a flow
Looking at the above flow, you might notice that another_action is run on the
output of a task regardless of which branch is taken. If you were writing this
in normal Python code, you might refactor the logic as:
if check_condition():
val = action_if_true()
else:
val = action_if_false()
another_action(val)
To implement the same logic as a Flow, you can make use of Prefect's merge
function. This function takes one or more tasks conditional tasks, and returns
the output of the first task that isn't Skipped. This can be used to "merge"
multiple branches in a flow together.
The resulting flow looks like:
