Asynchronous 多线程集成测试的MSTest超时

Asynchronous 多线程集成测试的MSTest超时,asynchronous,timeout,unity-container,mstest,Asynchronous,Timeout,Unity Container,Mstest,在我们的项目中,我们有几千个单元测试。其中一些是集成测试,需要更大的设置,还使用多线程/异步部分,以及unity来设置对象 这些集成测试通常运行得非常顺利,但在某些情况下,当解决方案(~2.5k)中的所有测试都执行时,的异步组件似乎由于某种原因陷入死锁。(由于超时,测试中止) 我已经上下搜索了我的代码好几个小时了,但是我找不到导致死锁的任何原因 顺便说一句,我们使用轮询等待线程重新同步: var foo = new SomethingThatIsModifiedByTheAsyncThreads

在我们的项目中,我们有几千个单元测试。其中一些是集成测试,需要更大的设置,还使用多线程/异步部分,以及unity来设置对象

这些集成测试通常运行得非常顺利,但在某些情况下,当解决方案(~2.5k)中的所有测试都执行时,的异步组件似乎由于某种原因陷入死锁。(由于超时,测试中止)

我已经上下搜索了我的代码好几个小时了,但是我找不到导致死锁的任何原因

顺便说一句,我们使用轮询等待线程重新同步:

var foo = new SomethingThatIsModifiedByTheAsyncThreads();
this.SetupEverything();
this.AsyncComponentX.StartSomething(foo);

// wait for completion
while (foo.State != fooStates.AllDone)
{
Thread.Sleep(10);
}

// check output
Assert.IsTrue(this.CheckThatAllIsRight(foo));
这不是最好的方法,但我不认为这是问题所在(其他想法?)。。所以,在我看来,异步的东西似乎根本没有完成,它没有将foo.State设置为AllDone。但这怎么可能呢?为什么只有在我运行大量测试(而不是调试)时才会发生这种情况?我怀疑MSTest会把线程(共有四个)搞得一团糟,不让它们运行。(顺便说一句,asynch stuff作为一个特殊的异步模块运行,它作为一个消息队列工作,每个队列都有一个worker/messageconsumer线程。但是这些类似乎是经过验证的。)

也很难弄清楚其中发生了什么,我正在扩展异步部分中的日志记录。但是,我仍然不知道问题出在哪里,也不知道如何在不运行所有测试的情况下重现问题。。有什么建议吗/ 我已经阅读了MSTest的一些线程问题。。有什么特别的事情要考虑吗?< / P>