Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从TestMethod调用时,异步方法不返回_C#_Visual Studio_Unit Testing_Asynchronous - Fatal编程技术网

C# 从TestMethod调用时,异步方法不返回

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

我正在使用Visual Studio 2013和MSTest对我的异步方法进行单元测试。我有如下异步方法:

    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();