A Mach task is a collection of resources, a virtual address space, and a port name space. They depend on threads for executing program code: a task alone has no means to do so.
Switching from one task to another one involves doing a context switch, which is usually not a cheap operation, as it involves switching the hardware's idea of the memory layout (virtual address space), amongst others.
Mach tasks are distinct from UNIX processes in that they provide less facilities. In processes, there are signals, process / group / session IDs, file descriptors and many other things. Tasks are used for resource allocation and sharing; they are resource containers.