C# Com对象方法在asp.net核心中被阻止,但在单元测试中未被阻止
我有一个类,用来包装一个com对象(MLApp),用于调用matlab。我有一个单元测试,初始化5个matlab会话,并在每个会话中运行一个暂停10秒的命令。我的单元测试运行大约需要10秒,这是预期的,因为它们应该并行执行C# Com对象方法在asp.net核心中被阻止,但在单元测试中未被阻止,c#,asp.net-core,com,C#,Asp.net Core,Com,我有一个类,用来包装一个com对象(MLApp),用于调用matlab。我有一个单元测试,初始化5个matlab会话,并在每个会话中运行一个暂停10秒的命令。我的单元测试运行大约需要10秒,这是预期的,因为它们应该并行执行 [Test] public void ParallelExecution() { List<MatlabRunner> runners = new List<MatlabRunner>(); for (int i = 0; i <
[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());
}
}
问题是我向这个验证方法发出了两个并行GET请求。当一个请求调用runner.Execute(“暂停(10)”)
时,另一个请求被阻止调用此方法。我希望并行地对这个Verify方法进行两次调用,并并行执行,总共在10秒钟内完成。但是,两个请求完成都需要20秒(第一个10秒,第二个10秒)。在我的单元测试中,我使用任务并行调用相同的方法,整个单元测试在10秒内执行,尽管启动了5个运行程序。如果我在web服务中也这样做,则需要50秒。希望这是足够的信息。如果有价值的话,我可以附上一个带有时间戳的日志来显示事情是如何执行的
从IIS的配置角度来看,我是否遗漏了一些内容?当我构建或发布时,可能会发生什么 你能修改你的问题来澄清问题吗?我读了好几遍,我无法确定问题出在哪里is@CamiloTerevinto当然,我已经添加了上面的编辑。谢谢,这样更清楚了。我想知道你是如何调用这个端点的?我是通过打开两个不同的浏览器并在每个浏览器中放置URL来发出请求的。
[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);
}