gpt4 book ai didi

c# - 等待以另一种方法启动的任务

转载 作者:行者123 更新时间:2023-11-30 14:34:18 25 4
gpt4 key购买 nike

在继续我的单元测试的其余部分之前,我需要确保完成一项任务。

但这是在另一个方法中等待的任务(我正在对该方法进行单元测试。)

我已经尝试等待任务或调用 task.Wait() 但每次测试都不起作用。

实际的方法是这样的:

private async void DoStuff(long idToLookUp)
{
IOrder order = await orderService.LookUpIdAsync(idToLookUp);

OtherStuff = false;
}

我正在尝试像这样对其进行单元测试:

[TestMethod]
public void TestDoStuff()
{
//+ Arrange
var lookupTask = Task<IOrderableTest>.Factory.StartNew(() => validOrder);
orderService.LookUpIdAsync(Arg.Any<long>()).Returns(lookupTask);

//+ Act
myViewModel.DoStuff();
await lookupTask;

//+ Assert
myViewModel.OtherStuff.Should().BeFalse();
}

失败的方式非常无益。在它导致另一个测试失败并显示“代理进程在测试运行时停止”。 (据我所知,这意味着后台线程在测试运行时抛出了异常。)

所以我想知道如何让我的代码等待单元测试完成。

我看到了this答案似乎还不错。但它更适合方法的调用。我不是在调用它,我只是有任务而已。

注意:我的目标是使用 ansyc 包的 .NET 4.0。

最佳答案

你永远不应该有 void返回 async方法,除非它将成为一个事件处理程序(在这种情况下你别无选择)。当 async方法是 void你无法知道它何时结束。

该方法应返回 Task (而不是 Task<T> 如果它没有有意义的结果,只是表明它完成了)。

一旦返回 Task你可以await测试时使用它,或使用 Wait ,如果合适的话。

您正在等待该方法所依赖的任务之一,但这并不意味着它已经完成了它自己的代码。这意味着您的测试引入了竞争条件。

关于c# - 等待以另一种方法启动的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267962/

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