0

Я пытаюсь создать страницу, которая позволяет пользователю запускать хранимую процедуру, а затем продолжать использовать остальную часть сайта, не дожидаясь завершения этого процесса.
Я попытался создать рабочий рабочий поток и вторичный EDMX только для этого вызова, но в настоящее время сайт по-прежнему остается неактуальным во время запуска кода (обычно занимает от одной до двух минут).Запуск ASP.NET Entity Framework 6 хранимой процедуры асинхронно

protected void SaveReversal_Click(object sender, EventArgs e) 
    { 
     if (PeriodList.SelectedValue != "") 
     { 
      var bw = new BackgroundWorker(); 
      bw.DoWork += new DoWorkEventHandler(AsyncReverseDataload_DoWork); 
      bw.WorkerReportsProgress = false; 
      bw.WorkerSupportsCancellation = false; 
      bw.RunWorkerAsync(Convert.ToInt32(PeriodList.SelectedValue)); 
     } 
    } 

    private void AsyncReverseDataload_DoWork(object sender, DoWorkEventArgs e) 
    { 
     int TrackerDetailKey = (int)e.Argument; 
     using (AsyncEntities ar = new AsyncEntities()) 
     { 
      IObjectContextAdapter dbcontextadapter = (IObjectContextAdapter)ar; 
      dbcontextadapter.ObjectContext.CommandTimeout = 600; 

      try 
      { 
       var results = ar.ReverseDataload(TrackerDetailKey); 
      } 
      catch (Exception ex) 
      { 
       Console.Write(ex.ToString()); 
      } 
     } 
    } 

Как я могу получить это на самом деле работает так, что сайт остается отзывчивым к пользователю после начала выполнения хранимой процедуры?

+0

Сделать метод асинхронным? –

ответ

2

, так как вы говорите, что может потребоваться одна или две минуты, когда вы находитесь в ситуации «Огонь и забыть» (по-моему, я так думаю).

Вот некоторые варианты:
-ThreadPool using Task.Run, Task.Factory.StartNew и т. Д. Однако я действительно думаю, что это плохая идея! IIS/ASP.NET должен утилизировать приложение. Если фоновый поток работает, когда происходит эта рециркуляция, эта работа будет потеряна.

-QueueBackgroundWorkItem, использовать это, если ваша задача доходит до 30 секунд

-IRegisteredObject, который является фон рабочий + последним шансом

-third сторонних библиотеки "замедленного воспламенение" Nito.AspNetBackgroundTasks пакета, проверьте страницу github, как ее использовать.

-Создание метода из области видимости, то есть из asmx/wcf, возможно встроенного в проект.

к тому же все это я хотел бы пойти на надежное решение которое
-console приложение или
-Service, на какие задачи могут быть добавлены из вас WebApp непосредственно в «очереди задач», а затем выполняется безопасно оттуда с журналами и необходимой логикой.

Надеюсь, это поможет.

+0

Спасибо, там было много хорошей информации! Я закончил работу с WCF-сервисом, и IsOneWay установил true. Страница вызывает его, а затем позволяет пользователю продолжать использовать остальную часть сайта как обычно. – wham12

+0

хорошо, приветствует тогда: D –

Смежные вопросы