我正在尝试在我的Web应用程序中实现async await来调用soap服务。我实现了依赖注入,当我调用数据库时它工作正常。 当我尝试调用webservice时,我得到了响应,但一旦它存在,查询就会出现死锁。我无法弄清楚出了什么问题。我是新手这个异步的东西感谢你对此的投入。 这是我调用mvc应用程序中的服务来调用调用
的方式match_parent
查询:
public void GetPersonData()
{
var persons = queryProcessor.Process(new GetPersonsWhichNeedApiCalls());
var watch = System.Diagnostics.Stopwatch.StartNew();
// the code that you want to measure comes here
SearchAPI(persons).Wait();
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
}
private async Task SearchAPI(IEnumerable<Person> persons)
{
var tasks = persons.Select(async eachPerson =>
{
var result = await asyncQueryProcessor.ProcessAsync(new PersonSearchCall { Name = eachPerson.Name, Id = eachPerson.Id });
commandProcessor.Process(new CreatePersonSearch()
{
PersonSearch = result
});
});
await Task.WhenAll(tasks);
}
这个简单的注射器我能够使用同步方式实现这一点,但因为我正在呼叫一个人的列表,每个呼叫大约需要2秒。我正在尝试利用async的使用并等待从列表中进行多次调用。
答案 0 :(得分:1)
正如StriplingWarrior评论的那样,你的问题是你blocking on async
code。您需要使用async
all the way:
public async Task GetPersonData()
{
var persons= queryProcessor.Process(new GetPersonsWhichNeedApiCalls());
var watch = System.Diagnostics.Stopwatch.StartNew();
await SearchAPI(persons);
var elapsedMs = watch.ElapsedMilliseconds;
}