Async - с этой командой уже есть открытый DataReader, который должен быть закрыт первым - PullRequest
0 голосов
/ 01 мая 2019

Я изменил метод в своем коде с синхронизации на асинхронный, но теперь я вижу исключение выше, когда я использовал функциональность в приложении.Мне интересно, есть ли что-то не так с тем, как я реализовал асинхронный метод.

Этот метод выглядит следующим образом:

private async Task<IEnumerable<CarModel>> GetCarModelsAsync(Car car, carOptions carOptions)
{
    return (await Task.WhenAll(car.Models.Where(x => carOptions.SelectedModelIds.Contains(x.Id))
        .Select(async car => new CarModel
        {
            MyDocumentModel = await_myModelBuilder.GetDocumentModel(car),
            MyDocumentModelB = await _myBuilderB.GetDocumentModel(car),
            MyDocumentModelC = await _myBuilderC.GetDocumentModel(car),
            MyDocumentModelD = await _myBuilderD.GetDocumentModel(car),
            MyDocumentModelE = _myBuilderE.GetDocumentModel(car)

        MyDocumentModelF = _myBuilderE.GetDocumentModel(car)
        }))).ToList();
}

Некоторые из вызовов myBuilders являются асинхронными методами и ожидаются инекоторые синхронизированы.

Прочитав некоторые ответы на проблему, которую я видел, я мог бы попытаться добавить нижеприведенную строку в строку подключения, это должно решить проблему.

MultipleActiveResultSets=True"

Я сделал это, и это устранило проблему, но мне интересно, что это просто исправление взлома, а не решение проблемы с кодом.

Или проблема в том, как я разработалэтот асинхронный метод?

Метод вызова GetCarModelsAsync выглядит следующим образом:

public async Task<VehicleModel> GetVehcileModel(Car car, CarOptions carOptions)
{
    Task<IEnumerable<CarModel>> cars = GetCarModelsAsync(car, carOptions);

    return new VehicleModel
    {
        CarModels = await cars
    };
}

Что-то не так с тем, как написан этот асинхронный код?Или же проблема будет более вероятной в одном из ожидаемых вызовов _myBuilder - я попытался пройти через них и убедиться, что .ToList () был помещен там, где требуется, но, возможно, я все еще пропускаю один или два из них, где-то _myBuilders

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