Делегат в C# - типобезопасный указатель на метод, только приличный, с проверкой сигнатуры компилятором, а не как в C дикий void*.
Что умеет: хранить ссылку на метод, передаваться параметром, копиться в список через += и звать сразу пачку методов одним вызовом.
Чего не умеет: делегат это не поток и не асинхронность сама по себе, хотя часто путают - вызов делегата синхронный, если явно не завернуть в Task.
Событие в C# по факту обёрнутый делегат с ограниченным доступом снаружи класса, лямбда - просто короткая запись того же делегата.
В плюсах никакого delegate нет и не будет, там свой набор: указатель на функцию, указатель на метод класса отдельным синтаксисом, std::function как обёртка над всем этим. Похожая суть, разная кухня, не путай C# с C++ по одному слову в вопросе.
Ответить на вопрос