gpt4 book ai didi

c# - 单元测试和多个异步任务

转载 作者:太空狗 更新时间:2023-10-30 00:39:42 24 4
gpt4 key购买 nike

我正在创建单元测试以协助构建一些代码,这些代码将接受并排队(如果需要)来 self 的 Controller 的入站请求。

在我的单元测试中,我希望几乎同时触发两行代码,尽管调用之间有 2 秒的延迟。这允许触发我的逻辑的第一个分支,然后在第二次调用时,因为已经看到传递的数据,所以使用备用逻辑分支。

我已经接近了,但感觉很乱。我正在使用以下代码,它会立即传递我的第一个调用并继续执行后续代码行。

Task.Factory.StartNew(() => stubbedQueueHandler.QueueProcessor(setupModel));

Thread.Sleep(2000);
//second call
stubbedQueueHandler.QueueProcessor(setupModel);

await Task.Delay(10000);

然而,单元测试在第一次调用完成之前结束,这反过来又终止了进程。允许第一个调用完成的唯一方法是放置一个 await Task.Delay() 行来实现这一点。

我明白它为什么这样做了,因为我已经有效地挂断了电话,没有期待回复。我不想开始使用任务延迟,我确信这只是我缺乏理解,这就是异步编程的问题:o)。

最佳答案

您需要捕获启动 QueueProcessorTask 并在第二次调用 stub 后等待它:

public async Task FooTestAsync()
{
var task = Task.Run(() => stubbedQueueHandler.QueueProcessor(setupModel));
await Task.Delay(2000);

stubbedQueueHandler.QueueProcessor(setupModel);
await task;
}

这样,您可以确保在操作完成之前完成操作,因为 QueueProcessor 将同步阻塞直到其操作完成。

关于c# - 单元测试和多个异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33634375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com