我有一个使用async/await的Web API:
public class SampleController : ApiController
{
public async Task<IEnumerable<DocumentModel>> GetAll()
{
List<DocumentModel> modelItems = new List<DocumentModel>();
var response = await SearchDocumentsAsync();
var items = response.Results.ToList();
foreach(var document in documents)
{
var model = new DocumentModel()
{
Id = document.Id,
Name = document.Name
};
modelItems.Add(model);
}
return modelItems;
}
private Task<DocumentSearchResponse<Document>> SearchDocumentsAsync()
{
using (var searchClient = new SearchServiceClient(new SearchCredentials(searchServiceKey), searchServiceUri))
using (var indexClient = searchClient.Indexes.GetClient(indexName))
{
var parameters = new SearchParameters()
{
IncludeTotalResultCount = true
};
// call the Azure Search service
return indexClient.Documents.SearchAsync<Document>(search.Term, parameters);
}
}
}
我在调用堆栈中没有使用
.Wait()
或.Result
。这段代码是否仍然可能出现死锁?当我调试这段代码时,似乎确实出现了死锁,但就是想不出为什么。我使用Postman发送了几个请求,有时候响应永远不会返回。如果我在调试器中按下暂停按钮,它将显示一行绿色的文本,指示“此线程从当前函数返回时要执行的下一条语句”。当我按下暂停按钮时,代码所处位置并不一致,但似乎每隔一个请求就会被阻塞一次。
上述代码是否可能导致死锁?