powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Что почитать чтобы научится программировать в асинхронной манере.
25 сообщений из 70, страница 1 из 3
Что почитать чтобы научится программировать в асинхронной манере.
    #37037874
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начал разрабатывать приложение для сильвера - столкнулся со сложностями асинхронного взаимодействия с сервером. Что почитать по этому поводу чтобы начать эффективно разрабатывать в асинхронной модели взаимодействия с сервером
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37037947
Denis.,

извиняюсь за оффтоп, но... а в чем конкретно сложности-то? даже в дремучем WinApi полно функций, которые принимают указатель на callback, и только в ём (коллбэке) и можно что-то делать с результатом выполнения функции... столь любимый ajax сегодня (хоть в виде jquery, хоть как) - та же самая архивная... вещь. Просто считай, что тебя известят о результатах... потом... в другом потоке... делов-то?
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37037952
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
злостный оффтопDenis.,

извиняюсь за оффтоп, но... а в чем конкретно сложности-то? даже в дремучем WinApi полно функций, которые принимают указатель на callback, и только в ём (коллбэке) и можно что-то делать с результатом выполнения функции... столь любимый ajax сегодня (хоть в виде jquery, хоть как) - та же самая архивная... вещь. Просто считай, что тебя известят о результатах... потом... в другом потоке... делов-то?
Почему оффтоп. Это не оффтоп.
Сложность вот в чем:
Например я заполняю список неких айтемов, берущихся с сервера. На колбек вешаю заполнение списка и все ок. Затем мне от сервера опять нужен этот список, но чтобы заполнить не первый листбокс, а например другой. Как в колбеке я пойму какой лист заполнять? Я понимаю что есть множество решений, но стройного что то я не соображу. А хочется прочитать про типичный паттерн как это делается.
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37037965
__ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis.А хочется прочитать про типичный паттерн как это делается.
Паттерн называется Observer
Велосипед называется Rx
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37037987
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__ЛПDenis.А хочется прочитать про типичный паттерн как это делается.
Паттерн называется Observer
Велосипед называется Rx
Причем тут обзервер?
Про rx почитаю, спасибо.
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038000
__ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis.Причем тут обзервер?
Именно при том.

Denis.Про rx почитаю, спасибо.
Да не за что.
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038068
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще не понял проблемы. Предположим у нас в ViewModel есть

Код: plaintext
public ObservableCollection<T> Items => INotifyPropertyChanged

В асинхронном методе получения данных с сервера просто читаем ответ (e.Result) и пишем в эту коллекцию (Items), которая биндится в самом представлении (хоть декларативно, хоть в code behind).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public void Foo()
{
    var svc = ServiceUtility.GetClient();
    svc.GetCategoriesCompleted += delegate(object sender, GetCategoriesCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            throw new System.Exception(e.Error.Message);
        }
        this.Items = e.Result;
     };
     svc.GetCategoriesAsync();
     svc.CloseAsync();
}

Если нужно несколько вызовов сервиса + результаты в отдельные модели (или тупо кастом проперти в ViewModel), ради бога - оформляем свои Items1, Items2, ..., ItemsN и работаем с ними. В чём вопрос-то?
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038078
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Вопрос как раз в "Если нужно несколько вызовов сервиса + результаты в отдельные модели (или тупо кастом проперти в ViewModel), ради бога - оформляем свои Items1, Items2, ..., ItemsN и работаем с ними"
Возьмем пример: есть набор неких айтемов. Я загрузил приложение, дернул с сервера этот набор, он отобразился в листе.
Затем, например, я нажимаю некую кнопку, которая должна мне мессаджбоксом показать кол-во айтемов(на серввере), не обновив листбок прежде заполненный. Как это правильно делается?
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038090
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Как это правильно делается?
Я же уже сказал - во вьюмодели.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void GetCategories()
{
    this.Items = e.Result;
}

public void GetCategoriesCount()
{
    /// ...
    this.Count = e.Result;
}

А в представлении с этими данными (Items и Count) можете что угодно делать.

P.S. Почитайте про паттерны MVVM или MVC (MVP).
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038102
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУDenis.Как это правильно делается?
Я же уже сказал - во вьюмодели.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void GetCategories()
{
    this.Items = e.Result;
}

public void GetCategoriesCount()
{
    /// ...
    this.Count = e.Result;
}

А в представлении с этими данными (Items и Count) можете что угодно делать.

P.S. Почитайте про паттерны MVVM или MVC (MVP).
Про MVC и MVP я, конечно, в курсе. Про mvvm - представляю что это такое. тем не менее все же непонятно 2 момента:
мне на "каждый вызов" удаленного метода создавать член класса?
Как в удобочитаемой манере заюзать, в данном случае, Count, без синка потоков? Нечто вроде:
Код: plaintext
1.
2.
3.
4.
5.
void Foo()
{
 if(serviceProxy.GetItemsCount()==0)
 ...
}
ЗЫ. Я понимаю различные варианты решения проблемы. Просто не нахожу ни один из них тривиальным(что часто == правильным)
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038112
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще мне непонятно почему убрана синхронная модель :-(
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038114
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Про mvvm - представляю что это такое.
Не представляете.

Denis.мне на "каждый вызов" удаленного метода создавать член класса?
Это Вы уже сами решайте, но ViewModel "должна быть в курсе", что Вы там дёрнули и что оно там вернулось, чтобы известить об этом представление.

Denis.без синка потоков?
Их не нужно синхронизировать, у нас полноценная асинхронная обёртка. Никаких костылей не нужно, всё, как Вы выразились, тривиально. Уже обсуждали про "синхронность SL".
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038117
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.вообще мне непонятно почему убрана синхронная модель :-(
Читать от сюда: 9899156
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038118
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУDenis.Про mvvm - представляю что это такое.
Не представляете.

Denis.мне на "каждый вызов" удаленного метода создавать член класса?
Это Вы уже сами решайте, но ViewModel "должна быть в курсе", что Вы там дёрнули и что оно там вернулось, чтобы известить об этом представление.

Denis.без синка потоков?
Их не нужно синхронизировать, у нас полноценная асинхронная обёртка. Никаких костылей не нужно, всё, как Вы выразились, тривиально. Уже обсуждали про "синхронность SL".
Это все здорово при биндинге вью на вьюмодель, но вот когда никакого биндинга нет, а вызов сервиса используется в БЛ фактически все становится не так стройно
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038120
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Это все здорово при биндинге вью на вьюмодель, но вот когда никакого биндинга нет, а вызов сервиса используется в БЛ фактически все становится не так стройно

Код: plaintext
1.
2.
3.
private void OnCompleted(object sender, OnCompletedEventArgs e ) 
{     
    Dispatcher.BeginInvoke(() => // доступ к UI // ); 
}
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038125
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУDenis.Это все здорово при биндинге вью на вьюмодель, но вот когда никакого биндинга нет, а вызов сервиса используется в БЛ фактически все становится не так стройно

Код: plaintext
1.
2.
3.
private void OnCompleted(object sender, OnCompletedEventArgs e ) 
{     
    Dispatcher.BeginInvoke(() => // доступ к UI // ); 
}


не, я не про то:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void SomeMethod()
{
   if(serviceProxy.GetItemsCount()==0)
  { 
      viewModel.Items = serviceProxy.GetOtherItems();
      if(!serviceProxy.TryFillDefaultItems())
      {
          ....
      }
  }
}
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038131
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.не, я не про то:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void SomeMethod()
{
   if(serviceProxy.GetItemsCount()==0)
  { 
      viewModel.Items = serviceProxy.GetOtherItems();
      if(!serviceProxy.TryFillDefaultItems())
      {
          ....
      }
  }
}


Чё за бред? :)
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038141
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

это не важно. Суть в том, как его переписать в асинхронной модели. Например !serviceProxy.TryFillDefaultItems(). Мне нужно вызвать асинхронный метод, в нем заполнить поле, созданное для него, в потоке текущего метода подождать коллбека и взять значение из члена.
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038148
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Простыми lookup'ами лучше не засорять основной ViewModel. Для них можно создать отдельный Locator(конвертер или markup extenstions), который будет делать выборку из БД.
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038152
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.МСУ, это не важно.
Это важно. Во-первых, с точки зрения производительности, а во-вторых - нагрузки на сам сервер, где котором хостится сервис. Зачем дергать n-раз метод, если можно за один проход получить интересующую информацию. Будет возвращаться класс, содержащий в себе всю необходимую информацию для принятия дальнейшего решения.
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038175
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уж надо раскидать по n-вызовам, то в чём проблема написать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var svc = ServiceUtility.GetClient();
svc.GetItemsCountCompleted += delegate(object service1, GetItemsCountCompletedEventArgs args1)
{
    if (args1.Result == 0)
    {
        var client = ServiceUtility.GetClient();
        client.GetItemsCountCompleted += delegate(object service2, GetItemsCountCompletedEventArgs args2)
        {
            // телодвижения
        };
        client.GetItemsCountAsync();
        client.CloseAsync();
    }
};
svc.GetItemsCountAsync();
svc.CloseAsync();
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038430
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
МСУЕсли уж надо раскидать по n-вызовам, то в чём проблема написать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var svc = ServiceUtility.GetClient();
svc.GetItemsCountCompleted += delegate(object service1, GetItemsCountCompletedEventArgs args1)
{
    if (args1.Result == 0)
    {
        var client = ServiceUtility.GetClient();
        client.GetItemsCountCompleted += delegate(object service2, GetItemsCountCompletedEventArgs args2)
        {
            // телодвижения
        };
        client.GetItemsCountAsync();
        client.CloseAsync();
    }
};
svc.GetItemsCountAsync();
svc.CloseAsync();


Не проблема, только лениво писать одно и тоже десятки раз
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37038917
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iНе проблема, только лениво писать одно и тоже десятки раз
Согласен. И я про то же.
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37039490
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУiНе проблема, только лениво писать одно и тоже десятки раз
Согласен. И я про то же.
Ну, дык, для это же Rx и советовали, насколько я понимаю?
...
Рейтинг: 0 / 0
Что почитать чтобы научится программировать в асинхронной манере.
    #37039698
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
МСУiНе проблема, только лениво писать одно и тоже десятки раз
Согласен. И я про то же.

Тогда предлагай общие варианты, когда не нужно это писать сорок восем раз.
...
Рейтинг: 0 / 0
25 сообщений из 70, страница 1 из 3
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Что почитать чтобы научится программировать в асинхронной манере.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]