TaskCompletionSource в C#
Класс TaskCompletionSource позволяет вручную переводить Task в завершённое состояние.
Так удобно обернуть чужой обратный вызов или событие: снаружи это обычная задача, которую можно ожидать.
Завершим задачу сами вызовом SetResult. await отдаст текст только после этого вызова:
TaskCompletionSource<string> tcs = new();
tcs.SetResult("ok");
Console.WriteLine(await tcs.Task); // выведет "ok"
Создайте задачу, которую завершаете сами числом 11, и выведите его квадрат.