web.api中的同步和异步方法

时间:2018-09-08 14:16:49

标签: c# asynchronous asp.net-web-api async-await

有人可以解释一下此代码是否可能造成死锁。 将同步数据库调用与异步数据库调用混合在一起,例如下面的代码。或者,如果首先执行了异步调用,那将带来死锁的风险。

    [Route("{id}/someobjects")]
    [ResponseType(typeof(IEnumerable<SomobjectDto>))]
    public async Task<IHttpActionResult> GetSomeobjects(string id)
    {
        var syncMethodResult = SyncDBCallMethod(); //In this method there is a databas call..

        var asyncMethodresult = await AsyncDBMCallMethod(1L);  //In this method there is a Async databas call..

1 个答案:

答案 0 :(得分:0)

在这种情况下,直到同步AsyncDBMCallMethod完成后,异步SyncDBCallMethod调用才会开始。

一旦您没有在异步/等待功能以及正确的 await 异步功能中混合使用Result.Wait之类的阻塞调用,则应该能够进行异步和同步一起打电话。

引用Async/Await - Best Practices in Asynchronous Programming