Работая с потоками и пулом потоков в первый раз, у нас есть два нажатия кнопки, которые вызывают вызов 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;
}
Ваше здоровье.





Реализован ли сон на клиенте или на сервере? Для чего пользователю нужно нажать «утвердить», а затем «утвердить дату»?
В любом случае, чтобы запускать задачи параллельно, я бы сделал это следующим образом:
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- Ждите
Сон реализован в скриптах, которые выполняются на стороне сервера и возвращают значение, просто чтобы проверить параллельное выполнение. Кнопки являются динамическими, мы можем добавить любое количество кнопок, которые можно использовать, например, для проверки статуса, даты заказа, запроса заказа и т. д. В зависимости от условия в загруженном сценарии C#.
веб-запросы уже выполняются в отдельных потоках, если вы используете MVC / Web API