У меня есть класс, который я использовал, чтобы обернуть com-объект (MLApp), который используется для вызова в matlab.У меня есть модульный тест, который инициализирует 5 сеансов Matlab и запускает команду, которая делает паузу на 10 секунд в каждом отдельном сеансе.Мой модульный тест занимает ~ 10 секунд, что и ожидается, поскольку они должны выполняться параллельно.
[Test]
public void ParallelExecution()
{
List<MatlabRunner> runners = new List<MatlabRunner>();
for (int i = 0; i < 5; i++)
{
runners.Add(new MatlabRunner());
}
try
{
List<Task<string>> t = new List<Task<string>>();
foreach (MatlabRunner r in runners)
t.Add(Task.Run<string>(()=>r.Execute( "pause(10)" )));
Task<string>.WaitAll(t.ToArray());
t.ForEach((task) => System.Console.WriteLine(task.Result));
}
finally
{
runners.ForEach((r)=>r.Quit());
}
}
Однако теперь, когда я добавляю то же самое в мой основной проект asp.net, яможет сделать два веб-запроса, и они оба получены параллельно (я знаю это, потому что я регистрирую, что запрос получен), но затем вызывается runner.Execute ().
[HttpGet("Verify")]
public JsonResult Verify(String lot = null,String lotStatus = null,int? NumPorts = null,int? wafer = null)
{
System.IO.File.AppendAllText(@"C:\Logs\log.txt", "\n\Received Request! " + System.DateTime.Now + "\n");
String command = "pause(10)";
MatlabRunner runner = null;
String result = "";
try
{
runner = new MatlabRunner();
result = runner.Execute(command);
}
catch(Exception e)
{
System.IO.File.AppendAllText(@"C:\Logs\log.txt", e.StackTrace + " " + e.InnerException + " " + e.GetType() + e.Source + " " + e.GetBaseException());
}
finally
{
runner.Quit();
System.IO.File.AppendAllText(@"C:\Logs\log.txt", "\nQuit! " + System.DateTime.Now + "\n");
}
return new JsonResult(result);
}
Проблема заключается вчто я делаю два параллельных запроса GET к этому методу Verify.Пока один запрос вызывает runner.Execute("pause(10)")
, другой запрос заблокирован от вызова этого метода.Я ожидал бы сделать два вызова к этому методу Verify параллельно, и они оба будут выполняться параллельно, в общей сложности ~ 10 секунд.Однако для выполнения обоих запросов требуется 20 секунд (10 для первого, 10 для второго).В моем модульном тесте я вызываю этот же метод параллельно, используя Задачи, и весь модульный тест выполняется за 10 секунд, несмотря на запуск 5 бегунов.Если бы я сделал то же самое в веб-сервисе, это заняло бы 50 секунд.Надеюсь, этого достаточно.Я могу прикрепить журнал с отметками времени, чтобы показать, как все выполняется, если это будет полезно.
Я что-то упускаю с точки зрения конфигурации в IIS?Потенциально что-то, когда я строю или публикую?