Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Continuous integration Microsoft.AspNet.TestHost.TestServer需要多个核心/处理器?_Continuous Integration_Cpu_Dnx_Appveyor - Fatal编程技术网

Continuous integration Microsoft.AspNet.TestHost.TestServer需要多个核心/处理器?

Continuous integration Microsoft.AspNet.TestHost.TestServer需要多个核心/处理器?,continuous-integration,cpu,dnx,appveyor,Continuous Integration,Cpu,Dnx,Appveyor,在一次测试之后,我最近在我的DNX项目中添加了一些集成测试。在本地,这些服务器运行良好(对于内存中的web服务器来说是这样) 但是,在运行时,集成测试会无限期挂起(最终会失败,因为appveyor构建的时间限制为60分钟) 奇怪的是,当运行该程序时,一切都运行良好 显而易见的结论是,Microsoft.AspNet.TestHost.TestServer可能需要一个以上的内核(或至少一个以上的逻辑处理器)。是否有人对此有任何经验可以确认/拒绝?正如@Tratcher作为评论回复: xUnit支持

在一次测试之后,我最近在我的DNX项目中添加了一些集成测试。在本地,这些服务器运行良好(对于内存中的web服务器来说是这样)

但是,在运行时,集成测试会无限期挂起(最终会失败,因为appveyor构建的时间限制为60分钟)

奇怪的是,当运行该程序时,一切都运行良好


显而易见的结论是,Microsoft.AspNet.TestHost.TestServer可能需要一个以上的内核(或至少一个以上的逻辑处理器)。是否有人对此有任何经验可以确认/拒绝?

正如@Tratcher作为评论回复: xUnit支持异步,因此使您的测试异步并返回任务(否则xUnit不知道测试结果,甚至在完成运行之前它都会通过):

既然您的测试是异步的,那么您可以使用wait,而不是对任务调用.Result(这就是导致问题的原因):


另外,值得注意的是为什么会发生这种情况。

仅供参考:Katana是DNX应用程序的前身。您使用的是DNX/ASP.NET5,而不是Katana。共享测试代码可能会有所帮助。感谢Tratcher-编辑此帖子以删除Katana。测试代码是-这是一个开源项目,因此测试的代码也在该repo中。啊,这是
。结果
>这会让你崩溃,它会挂断你唯一核心上的线程,使其他线程无法执行。将测试切换到
公共异步任务
,并使用
等待
。真棒@Tratcher-这就成功了!谢谢。单核不能处理多线程(多线程早于多核体系结构)有点奇怪但我想我需要多读一些关于异步的书才能理解这一点。无论如何,谢谢你的帮助!
 [Fact]
        public async Task Get_hello_should_ignore_bob()
        {
            // Given a sample client
            var client = SampleClient();

            // When I call POST /account/signin
            var value = new StringContent("");
            var response = await client.PostAsync("/account/signin", value);

            // Then the result should be Hello
            string result = await response.Content.ReadAsStringAsync();
            result.Should().Be("\"Hello\"");
        }