Я изменил метод в своем коде с синхронизации на асинхронный, но теперь я вижу исключение выше, когда я использовал функциональность в приложении.Мне интересно, есть ли что-то не так с тем, как я реализовал асинхронный метод.
Этот метод выглядит следующим образом:
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