Silverlight и ждать, что не удается

1

Мне нужно разрешить через 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 секунд)

Теги:
multithreading
silverlight
task-parallel-library

1 ответ

3
Лучший ответ

Свойство 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);
  • 0
    Я не могу, так как я нахожусь под регистрацией собственности ... если я отмечу lamda как асинхронный, только БОГ знает, что это возвращает мне разрешение собственности!
  • 0
    как насчет вызова этого кода до регистрации?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню