Multi-agent systems and especially unmanned vehicles, are a crucial part of the solution to a lot of real world problems, making essential the improvement of task allocation techniques. In this review, we present the main techniques used for task allocation algorithms, categorising them based on the techniques used, focusing mainly on recent works. We also analyse these methods, focusing mainly on their complexity, optimality and scalability. We also refer to common communication schemes used in task allocation methods, as well as to the role of uncertainty in task allocation. Finally, we compare them based on the above criteria, trying to find gaps in the literature and to propose the most promising ones.