Мне нужно разрешить через IoC свойство, которое, если оно не присутствует, должно быть принято в базе данных. все хранилища шахты находятся в форме
Task<FilterResponse> GetFiltersForInquiries(int idIstituto);
но по мере того, как вызывается Wait/Result, я запустил пользовательский интерфейс, и вызов веб-службы не выполняется
мой код вызова
var container = new Container();
container.RegisterSingle<IBodInquiryRepository>(new BodInquiryRepository());
container.RegisterSingle<FilterResponse>(() =>
{
var repository = container.GetInstance<IBodInquiryRepository>();
var res = repository.GetFiltersForInquiries(84).Result;
return res;
});
так как я не могу поставить async/wait, что я могу сделать? если бы я был под WPF, я бы сделал вызов синхронизации (это занимает 6-7 секунд)
Свойство Result
и метод Wait()
для Task
блокируются. Когда вызывается из потока пользовательского интерфейса, это хорошо известная причина тупика, потому что, как только задача завершена, попытка продолжения выполняется в потоке пользовательского интерфейса, который блокируется, поэтому он не может выполнить продолжение.
Чтобы избежать этой проблемы, попробуйте изменить код:
var res = await repository.GetFiltersForInquiries(84);
Эта статья Стивена Клири объясняет, как вы можете избежать общих ошибок с помощью async/await
.
В качестве альтернативы вы можете попробовать и вызывать свой async
код до регистрации в контейнере.
var repository = container.GetInstance<IBodInquiryRepository>();
var res = await repository.GetFiltersForInquiries(84);
var container = new Container();
container.RegisterSingle<IBodInquiryRepository>(new BodInquiryRepository());
container.RegisterSingle<FilterResponse>(res);