Вы можете использовать некоторые Pub / Sub или фоновые задания на стороне сервера, например, вы можете использовать HangFire , чтобы запланировать фоновое задание (вычисление вашего отчета), затем, когда задание будет готово. вам нужно как-то передать вычисленные данные со стороны сервера на сторону клиента, для этого вам необходимо в продолжение задания указать, как это будет сделано, например, это можно сделать с помощью SignalR
Если вам не нужен какой-либо сторонний поставщик, это будет немного сложнее, например, вы можете написать собственный Pub / Sub на основе каналов или BlockingCollection или что угодно. Затем на стороне клиента вам понадобится какое-то длинное вытягивание с использованием AJAX запросов или просто WebSockets, чтобы получить данные с сервера, когда он будет готов.