Typically for data parallelism you will be sharing the same dataset and performing multiple iterations of the same algorithm across cores/processors. Task parallelism is used for performing distinct processes across multiple cores/processors. There is some overlap but they are logically distinct. It is possible to have an application that does both. Frequently in that case the larger-scale functions will use task parallelism and will execute lower-level functions that perform data parallelism.
Key phrases to look for in this sort of a problem:
"for each ... in a collection" = task parallelism
"transposing ... in parallel" = data parallelism
"from one .. to another" = task parallelism
Any complex system could use both.