Как я могу сделать несколько асинхронных вызовов на мой webapi одновременно, не получая ошибок? - PullRequest
1 голос
/ 03 июня 2019

У меня проблема, когда я делаю 1 выборку, она работает, но когда я пытаюсь получить 4 звонка одновременно с 1 удачей, а остальные 3 не удается.

    public IHttpActionResult GetAll() {
        var products = _context.Products
            .ToList();

        if (products == null)
            return NotFound();

        return Ok(products.Select(x => CreateDto(x)));
    }

Это ошибка

An error has occurred.","ExceptionMessage":"There is already 
an open DataReader associated with this Command which must be 
closed first.

Когда я гуглю это, они предлагают добавить в строку соединений

MultipleActiveResultSets=True

Затем я получаю еще одну ошибку

ExecuteReader requires an open and available Connection. 
The connection's current state is open.

Тогда Google предлагает следующее.То, что я использую dbcontext неправильно ExecuteReader требует открытого и доступного соединения.Текущее состояние соединения: Соединение

Мой dbcontext выглядит так.Так что я не делаю с этим ничего особенного.

public class PContext : DbContext {

    public IDbSet<Products> Products{ get; set; }

}

Когда я возвращаю Ok (products.Select (x => CreateDto (x)));в первой строке кода я делаю много отборов и тому подобное.Если я удалю какой-то тяжелый код, то это сработает.Но кажется, что проблема в том, что этот материал не может обрабатывать несколько вызовов.Я имею в виду, что это должно зависеть от размера работы, которую он должен вернуть по окончании.

Есть идеи?

1 Ответ

0 голосов
/ 03 июня 2019

С макушки головы попробуйте это

public IHttpActionResult GetAll() {
    var products = _context.Products;

    if (products == null)
        return NotFound();
    var convertToListFirst = products.Select(x => CreateDto(x)).ToList();
    return Ok(convertToListFirst);
}

Я помню, как преобразовывал toList в неправильное время в прошлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...