Как я могу вызвать асинхронный процесс из размещенного модуля asp.net, используя C # 5 async / await?
=====================================================================================================

У меня есть длительный процесс, который вызывается с помощью метода Get модуля Nancy. Вместо того, чтобы браузер зависал во время работы процесса, я хотел бы, чтобы этот вызов был асинхронным, другими словами, я хочу, чтобы метод Get сразу возвращался и оставлял длительно работающий процесс на свое место. Затем я мог бы регулярно проверять состояние процесса и действовать соответствующим образом.

Я новичок в асинхронных / ожидающих функциях C # 5, но я уверен, что они предназначены именно для такого рода задач. Код ниже показывает мою попытку. Я вставил некоторые записи, которые демонстрируют, что он не работает асинхронно, как ожидалось. Вместо этого длительный процесс блокирует метод Get и браузер зависает.

**Module**

**Service**

**Extension Method**

**Log Output**

Вы можете видеть из выхода журнала выше, что`LongProcess()` блокирует возврат модуля Get. Если бы задача выполнялась асинхронно, я бы ожидал, что журнал будет выглядеть примерно так:

**Expected Log**

Я думаю, что на самом деле требуется поставить`await` в методе Get NancyModule. Возможно, что-то вроде приведенного ниже кода, но я не могу сделать это, потому что я не могу пометить конструктор модуля как`asnyc` и поэтому я не могу использовать`await` в методе Get (или так в настоящее время я верю)

Спасибо за любую помощь, примеры или указатели на ресурсы.

**Edit 1**

Дополнительные исследования показывают, что asp.net активно предотвращает`async` звонки по умолчанию. Что-то делать с`Session` и то, как он обрабатывает не потоки пользовательского интерфейса, я верю. Поэтому я добавил следующее в мой web.config (см. Ниже)

UseTaskFriendlySynchronizationContext
enableSessionState="false"

К сожалению, это не имеет никакого значения, и мой`async` / `await` позвонить`LongProcess()` все еще блокирует

e meant for just this kind of task.

Нет.`async`/`await` предназначены для облегчения асинхронного программированияwithin the context of a single process, Они не меняют природу HTTP-коммуникаций.

Когда вы используете`await` на сервере ASP.NET (в контексте HTTP-запроса) вы возвращаете поток ASP.NET в пул потоков. Однако ASP.NET знает, что HTTP-запрос не завершен, поэтому он не завершает ответ клиенту (браузеру).

Это по замыслу.

Вам нужно использовать AJAX, SignalR или другое решение, чтобы делать то, что вы хотите.



попробуйте установить атрибут страницы`Async="true"`in the aspx page
after doing that it wold look like this 
 `<%@ Page Language="C#" AutoEventWireup="true" CodeFile="XXX.aspx.cs" Inherits="xxx" Async="true" %>`

в файле Tcode behile вы можете сделать задачи и методы типа async и calll`await`  задачи от них ...

это может сработать