A few weeks ago I came across an issue involving a Workflow Join Activity and some confusion around what it does and how it works. There is a little bit of documentation on the wiki but it still left some questions unanswered.

The purpose of the Join Activity is to combine two or more paths of execution after they have branched out. This serves the purpose of ensuring that subsequent activities will not get run multiple times with unexpected results.

A Join activity will always wait for all active paths of execution to reach it before proceeding.

Join Activity-Path still executing

The difference between the Complete and Incomplete outputs comes down to whether or not all possible paths of execution have completed. For example, if there is a split to have two simultaneous tasks on parallel paths then after both tasks have completed the Join will finish with Complete.

Join Activity-Complete Example

To contrast that, when there is an if statement, only one path will ever actually get executed so the Join will always exit as Incomplete.

Join Activity-Incomplete Example

Hopefully that clarifies things a bit for you; it certainly helped me to review how it worked.