I recently asked Ovidiu Burlacu from the SSIS dev team to clarify the difference between a synchronous and an asynchronous data flow component in SQL Server Integration Services. He replied not just with that information but also some of the implications of these different behaviours. Hopefully Ovidiu won't mind me re-posting his comments here because in time I think will become useful information:
"A asynchronous component requires all the rows from the upstream component
before it begins processing the rows, to do some modification on the data,
and ususally generates a differant number of rows.
In a way, they act as both destination and source, thus they generate
different LineageID for the output columns. Since the mappings in the
downstream is done using the LineageID you need to restore these mappings."
He continued along the theme of the changing LineageIDs and spoke of new functionality in the next release (the upcoming February 2005 CTP) that does the mapping of the LineageIDs for you:
"We have now in place a mechanism of doing this automatically, but if the
flow downstream is big this can be time consuming and it might not always
Thanks for the tips Ovidiu (if you're reading).
Another distinction between synch and asynch components has been provided by Allan Mitchell and I think it states it nicely in more layman's terms:
"The crux of an asynch of component is that the Input and Output buffers are different. It is up to the component designer in an Async component to provide a column structure to the output buffer and hook up the data from the input."