单击按钮时方法的并行执行

时间:2018-07-03 08:29:34

标签: c# multithreading model-view-controller parallel-processing threadpool

第一次使用线程和线程池,我们有两个按钮单击,它们具有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秒的睡眠时间。

在存储库方法中,当我们一次又一次单击两个按钮时,我尝试了线程池和线程Task来并行运行该函数。

预期的输出是应该先运行睡眠时间较小的第二个按钮,然后再运行第二个按钮以向用户显示结果,但是就我而言,无论我们单击哪个按钮,都会先执行,然后单击下一步。

代码:

  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 :(得分:0)

是在客户端内部还是在服务器上实现了睡眠?用户需要先单击“批准”然后单击“批准日期”是什么目的?

无论如何,要并行运行任务,我将按照以下步骤进行操作:

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