Вы говорите, что простая HTTP-ссылка недоступна на стороне клиента, пока не завершится асинхронная обратная передача? Если это так, это звучит как загадка, поскольку вам нужно либо оптимизировать процесс на стороне сервера, либо установить меньшее время ожидания запроса на стороне сервера. Либо так, либо измените дизайн вашего взаимодействия с пользователем, чтобы процесс генерации Excel на стороне сервера выполнялся асинхронно, а не синхронно, чтобы пользователю не приходилось ждать завершения генерации Excel. Вы можете придумать это на стороне клиента, чтобы затем установить таймер JavaScript для периодического запроса к серверу, чтобы увидеть, готов ли файл, и, если это так, указать это пользователю с помощью и дать им ссылку для загрузки файла или что-то в этом роде.
В противном случае, если вы могли бы вызвать другой AJAX-запрос во время ожидания его возврата (что может не произойти из-за его звука), вы могли бы просто выполнить новый HTTP-запрос, который «отменяет» длительный процесс. Но похоже, что это не сработает, поскольку сервер все еще обрабатывает длительный HTTP-запрос. Так что я бы предпочел изучить варианты в моем первом абзаце.
Если отмена действительно позволила выполнить асинхронный HTTP-запрос на стороне клиента, тогда вы можете установить значение состояния сеанса, чтобы указать, что была отменена просьба об отмене. Лично я бы к этому не подходил. Но если вы это сделаете, то ваш длительный процесс на стороне сервера может периодически искать наличие значения сеанса. Скажи:
if (Session["cancel-me"] != null)
{
Session["cancel-me"] = null;
abortThisLongProcess();
}