第一次使用线程和线程池,我们有两个按钮单击,它们具有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;
}
干杯。
答案 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