C# 从TestMethod调用时,异步方法不返回
我正在使用Visual Studio 2013和MSTest对我的异步方法进行单元测试。我有如下异步方法:C# 从TestMethod调用时,异步方法不返回,c#,visual-studio,unit-testing,asynchronous,C#,Visual Studio,Unit Testing,Asynchronous,我正在使用Visual Studio 2013和MSTest对我的异步方法进行单元测试。我有如下异步方法: public async Task<Client> AddClientAsync(Client newClient) { newClient.ObjectState = ObjectState.Added; base.Insert(newClient); await unitOfWorkAsync.SaveChan
public async Task<Client> AddClientAsync(Client newClient)
{
newClient.ObjectState = ObjectState.Added;
base.Insert(newClient);
await unitOfWorkAsync.SaveChangesAsync();
return newClient;
}
当我运行/调试测试用例时,控制一直到下线,并且永远不会返回。它有点卡住了,一直在这条线上无休止地等待,测试永远不会完成
await unitOfWorkAsync.SaveChangesAsync();
你知道我在这里遗漏了什么吗
更新:它执行SaveChangesAsync()方法,该方法也返回结果,但post测试从未完成。您能给我们看一下
savechangesync
?由于它返回一个任务
,该方法完全有可能返回,但返回的任务可能永远不会完成。@StriplingWarrior:添加了代码。SyncObjectsState*()
方法中是否有锁定代码?这是我要找的第一个地方。任务不能保证与调用的线程或线程顺序相同。另一个想法是:如果引发异常,可以利用IDisposable
接口确保SyncObjectStatePostCommit()
在SyncObjectStatePreCommit()
之后调用。只需在构造函数中调用一个,在Dispose()
方法中调用另一个,然后使用语句将对象放入。至少使用try
/finally
语句来确保执行提交后方法。尝试在等待任务上添加ConfigureAwait(false),这确保任何可用线程都可以用于继续任务,而不是Asp.net工作线程。有关更多信息,请访问,您能否向我们展示savechangesync
?由于它返回一个任务
,该方法完全有可能返回,但返回的任务可能永远不会完成。@StriplingWarrior:添加了代码。SyncObjectsState*()
方法中是否有锁定代码?这是我要找的第一个地方。任务不能保证与调用的线程或线程顺序相同。另一个想法是:如果引发异常,可以利用IDisposable
接口确保SyncObjectStatePostCommit()
在SyncObjectStatePreCommit()
之后调用。只需在构造函数中调用一个,在Dispose()
方法中调用另一个,然后使用语句将对象放入。至少使用try
/finally
语句来确保执行提交后方法。尝试在等待任务上添加ConfigureAwait(false),这确保任何可用线程都可以用于继续任务,而不是Asp.net工作线程。更多信息请访问
await unitOfWorkAsync.SaveChangesAsync();
[TestMethod]
public async Task AddClientAsync_Success()
{
Client client = new Client()
{
Id=2,
FirstName="John",
LastName="Tylor",
MaritalStatusId=1,
RecordStatus=1
};
var result = await clientAppService.AddClientAsync(client);
Assert.IsNotNull(result);
}
await unitOfWorkAsync.SaveChangesAsync();