There is one template for any number of instantiations. As an example take vector and matrix operations as applied to integer, float, double precision elements. Obviously this makes program maintenance and modifications much safer and easier. Child packages can also be generic. There is nothing even remotely comparable in Fortran90.
Tasks can execute on one node but can also be distributed over several nodes.
Calls to tasks can be synchronous or asynchronous, mutually exclusive operations on variables shared by several tasks rely on passive tasks or on protected types. Concurrency and parallelism are part of the Ada kernel language. HPF data parallel. On a PC the line profile is calculated in interleaved concurrency. In Ada, new types can be derived from existing types, operations are inherited from the parent type but can be overwritten.