Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [SL] Одна переменная для нескольких обработчиков 
:(
    Опции темы
ababab
Дата 21.5.2012, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 29.4.2011

Репутация: нет
Всего: нет



Могут ли возникнуть ошибки одновременного доступа к объекту в следующем коде?
Код выполняется в Silverlight.

Есть некий сервис, запрашивающий данные:
Код

public static class DataService{
    public static void GetSomeData(long id, Action<SomeData> callback){
        var client = new WebClient();
        client.DownloadStringAsync(uri);
        client.DownloadStringCompleted+=(s,ea)=>{
            if (ea.error != null)
                callback(ea.Result)
            else
                MessageBox.show(ea.error);
        }
    }
}

И есть код:
Код

pulbic void Test(){
    var asyncCounter = 0;
    foreach (var id in idList){
        asyncCounter++;
        DataService.GetSomeData(id, data=>{
            asyncCounter--;
            if (asyncCounter == 0){
                DoSmthElse(...);
            }
        });
    }
}

Здесь происходит несколько одновременных запросов, по завершении которых происходит вызов DoSmthElse();
Достигается это за счет использования переменной asyncCounter.

Могут ли быть проблемы при использовании этой одной переменной в обработчиках разных запросов в Silverlight?
PM MAIL   Вверх
erm0l0v
Дата 22.5.2012, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 11.1.2011

Репутация: нет
Всего: 1



По моему все обработчики событий в вашем примере должны вызываться в одном потоке, по этому никаких проблем быть не должно. Единственное вы должны понимать что не факт что все обработчики событий будут вызываться в том порядке в котором вы вызываете GetSomeData. Но как я понял для вашего кода это не критично...
PM MAIL   Вверх
ababab
Дата 22.5.2012, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 29.4.2011

Репутация: нет
Всего: нет



Цитата(erm0l0v @ 22.5.2012,  07:35)
По моему все обработчики событий в вашем примере должны вызываться в одном потоке, по этому никаких проблем быть не должно.

Да, поскольку все обработчики запросов WebClient в Silverlight выполняются в UI-потоке.
Цитата(http://msdn.microsoft.com/en-us/library/cc197953(v=vs.95).aspx)
The WebClient callback, which is raised when the HTTP response is returned, is invoked on the User Interface (UI) thread, and can be used to update the properties of UI elements.

Цитата(erm0l0v @ 22.5.2012,  07:35)
Единственное вы должны понимать что не факт что все обработчики событий будут вызываться в том порядке в котором вы вызываете GetSomeData. Но как я понял для вашего кода это не критично...
Верно, не критично. Код делает несколько запросов параллельно и обработчики возвращаются в случайном порядке.

Тонкость в том, что все это будет работать только в условиях, подобных Silverlight.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0734 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.