无法在调用soap服务时使用Async await

时间:2017-02-01 21:16:58

标签: c# .net wcf async-await simple-injector

我正在尝试在我的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的使用并等待从列表中进行多次调用。

1 个答案:

答案 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;
}