【发布时间】:2016-02-11 14:08:40
【问题描述】:
我正在创建单元测试来帮助构建一些代码,这些代码将接受和排队(如果需要)来自我的控制器的入站请求。
在我的单元测试中,我希望两行代码几乎同时触发,尽管调用之间有 2 秒的延迟。这允许触发我的逻辑的第一个分支,然后在第二次调用时,因为已经看到传递的数据,所以使用了备用逻辑分支。
我已经接近了,但感觉很乱。我正在使用以下代码,它会立即结束我的第一次调用并继续执行后续代码行。
Task.Factory.StartNew(() => stubbedQueueHandler.QueueProcessor(setupModel));
Thread.Sleep(2000);
//second call
stubbedQueueHandler.QueueProcessor(setupModel);
await Task.Delay(10000);
但是,单元测试在第一次调用完成之前结束,这反过来会终止进程。让第一次调用完成的唯一方法是添加一个 await Task.Delay() 行。
我明白它为什么会这样做,因为我已经有效地接听了电话,没有期望得到回复。我不想开始使用任务延迟,而且我确信这只是我对异步编程的理解不足:o)。
【问题讨论】:
标签: c# asp.net asynchronous asp.net-web-api async-await