ну вот асинк/авайт по всей программе перемалывается в потоках пула. а значит в любой момент нужный поток может кто то забрать. пусть даже ненадолго. а Parallel.Foreach так вообще сильно. А значит await engine.RedirectTo(); будет ждать пока отдадут.
у вас await engine.RedirectTo(); в классах моделей тоже что ли есть?