Assíncrono / aguardar e paralelo em C # [fechado]

Quando devo usar async / await e quando devo usar parallel.foreach em c #? São paralelos e async / await servem o mesmo propósito? Quais são as diferenças neles?