1. A method for controlling execution of components, each of said components including control code for executing a task associated with said component, the method including: receiving information representative of a graph-based program specification having components, each of which corresponds to at least one task, and directed links between ports of said components, said directed links defining a dependency between said components, wherein said components include a first component and a second component, wherein a directed link exists between a port of said first component and a port of said second component, wherein said first component specifies first-component execution code that when compiled enables execution of a first task, wherein said second component specifies second-component execution code that when compiled enables execution of a second task, and compiling said graph-based program specification, wherein compiling said graph-based program specification includes grafting first control code to said first-component execution code, wherein said first control code changes a state of said second component to a state in a group of states that includes a pending state, an active state, and a suppressed state, and wherein based on said state of said second component, said first control code causes an action including at least one of: (1) invoking said second component if said state of said second component changes from said pending state to said active state, or (2) suppressing said second component if said state of said second component changes from said pending state to said suppressed state.