Параллельное выполнение метода по нажатию кнопки - PullRequest
0 голосов
/ 03 июля 2018

Работая с потоками и пулом потоков в первый раз, у нас есть два нажатия кнопки, которые имеют вызов ajax для передачи двух параметров одному и тому же методу контроллера с разными значениями.

Html:

     <button type="button" class="ApproveBtn btn btn-theme">Approve</button>
     <button type="button" class="ApproveOrdDateBtn btn btn-theme">Approve OrderDate</button>

Когда первая кнопка нажата, она имеет динамический сценарий с временем ожидания 20 секунд, а вторая кнопка имеет сценарий с временем ожидания 5 секунд.

В методе репозитория я попробовал как пул потоков, так и поток задач, чтобы запустить функцию параллельно, когда мы нажимаем две кнопки одновременно, одну за другой.

Ожидается вывод, что вторая кнопка с небольшим временем ожидания должна запускаться первой, а затем вторая кнопка, чтобы отобразить результат пользователям, но в моем случае, когда мы нажимаем сначала, выполняется, а затем следующая.

Код:

  Public object Execute(string sScript, string sDatabase)
  {
    Object oResult="";
   //Thread pool
     var waitHandle = new ManualResetEvent(false);
        ThreadPool.QueueUserWorkItem
     (
         new WaitCallback
         (
             (_) =>
             {
                 oResult = RunScriptDemo(sScript,sDatabase);
                 waitHandle.Set();
             }
         )
     );
        waitHandle.WaitOne();

     //Task with thread
                 var t = Task<object>.Factory.StartNew(() =>
        {
            Object oTskResult = RunScriptDemo(sScript,sDatabase);
            return oTskResult;
        });
     oResult = t.Result;
     return oResult;
   }

    Public object RunScriptDemo(string sScript, string sDatabase)
   {
     object oReturn="";
    return oReturn;
   }

Приветствие.

1 Ответ

0 голосов
/ 03 июля 2018

Сон реализован в клиенте или на сервере? С какой целью пользователь должен нажать «одобрить», а затем «подтвердить дату»?

В любом случае, для параллельного запуска задач (ы) я бы сделал следующее:

Task<MyReturnType> firstTask;
Task<MyReturnType> secondTask;

//create the tasks, but not acutal execute it
firstTask = this.DoMethod1(); // return a Task<MyReturnType> -> uses await
secondTask = this.DoMethod2(); // return a Task<MyReturnType> -> uses await

//execute it in parallel and return if all tasks are done
await Task.WhenAll(firstTask, secondTask).ConfigureAwait(false);

Я думаю, ваш тип возврата - "объект". Эта ссылка может быть полезна: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/how-to-make-multiple-web-requests-in-parallel-by-using-async-and-await

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...