Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 00:53 06.07.25 
Компютри и Интернет
   >> Програмисти
*Кратък преглед

Страници по тази тема: 1 | 2 | 3 | (покажи всички)
Тема c# - превръщане на асинхронен метод в синхронен  
Автор Pekoнcтpykтop (дарвинист)
Публикувано04.04.13 19:52



Как беше форматирането за код да ви пусна едно въпросче



Тема Re: c# - превръщане на асинхронен метод в синхроне [re: Pekoнcтpykтop]  
Автор zaphod (мракобес)
Публикувано04.04.13 19:59



май беше с pre


sdfsdf





NE SUTOR ULTRA CREPIDAM


Тема Re: c# - превръщане на асинхронен метод в синхронен [re: Pekoнcтpykтop]  
Автор Aaron (charming)
Публикувано04.04.13 21:32



Пускай въпроса, че с тая тема превръщане на асинхронен метод в синхронен не ти се разбира кво искаш да кажеш.



Тема Re: c# - превръщане на асинхронен метод в синхронен [re: Pekoнcтpykтop]  
Автор chupac (chupacabron)
Публикувано04.04.13 22:00



айде пускай го, че и тая тема ще отече в мерене на пишки.

Al: [to some kids] Who wants to hear about the red-haired Grinch that stole Uncle Al\'s life?


Тема Re: c# - превръщане на асинхронен метод в синхронен [re: Pekoнcтpykтop]  
Автор Цар Изроуд ()
Публикувано05.04.13 01:43



Не трябваха ли перманентни магнити?



Тема Re: c# - превръщане на асинхронен метод в синхронен [re: Pekoнcтpykтop]  
Автор Pekoнcтpykтop (дарвинист)
Публикувано05.04.13 11:30



Добре, няма да рафинирам нещата до няква теоретична постановка, направо ви пляскам кода от проекта.


public bool GetUserSubscribeMethod(User user)
{
if (user == null)
throw new ArgumentException(ContractConstants.QelloService.BILLING_USER_STATUS);

bool result = false;
string req_params = "token=" + user.Token.AccessToken;
AutoResetEvent eventCompleted = new AutoResetEvent(false);

Thread thread = new Thread(start =>
{
PostJsonRequest<UserSubscribeStatus>(ContractConstants.QelloService.BILLING_USER_STATUS, req_params, response =>
{
if ((response.Error == null) && (response.Data != null))
{
result = true;

if ((response.Data.ActiveRecurring != null) &&
(response.Data.ActiveRecurring.Length > 0))
{
user.PaymentMethod = response.Data.ActiveRecurring[0].Trim();
user.SubscribeStatus.IsSubscribed = user.PaymentMethod != "";
}
}

eventCompleted.Set();
});
});

thread.Start();
eventCompleted.WaitOne();

return result;
}


PostJsonRequest, както може да се досетите, е асинхронен метод на базовия клас, който вика делегат, когато приключи. Обаче изникна случай, в който трябва задължително да се изчака резултат, защото програмата не може да работи без данните от заявката. Проблема, който възникна е, че WaitOne блокира thread, което не знам как точно и защо става. Съответно eventCompleted.Set() никога не се изпълнява и програмата зависва.



Тема Re: c# - превръщане на асинхронен метод в синхронен [re: Pekoнcтpykтop]  
Автор Aaron (charming)
Публикувано05.04.13 13:53



PostJsonRequest, както може да се досетите, е асинхронен метод на базовия клас, който вика делегат, когато приключи.

И най-вероятно този делегат се вика в main thread-a, който пък от своя страна вече е заключен от eventCompleted.WaitOne() и чака сигнал?
Как очакваш въобще да се изпълни eventCompleted.Set() :-)



Тема Re: c# - превръщане на асинхронен метод в синхронен [re: Aaron]  
Автор Pekoнcтpykтop (дарвинист)
Публикувано05.04.13 14:30



Очевидно е, че делегата е дефиниран на място.



Тема Re: c# - превръщане на асинхронен метод в синхроненнови [re: Pekoнcтpykтop]  
Автор Aaron (charming)
Публикувано05.04.13 15:16



Ами това си е класически дедлок според мен.

1. стартира се тред от мейн треда
2. мейн треда се локва и чака сигнал от стартирания тред.
3. стартирания тред се опитва да изпълни код от мейн треда, който е заключен.

Изкоментирай това: result = true; и пробвай пак.
Като цяло за да го тестваш може да сложиш 15 сек. в WaitOne и виж дали след 15сек. ще се отключи.



Тема Re: c# - превръщане на асинхронен метод в синхронен [re: Pekoнcтpykтop]  
Автор Cин Mapмoт (в целофан)
Публикувано05.04.13 16:43



thread.Join() няма ли да промени нещо вместо евента?




Страници по тази тема: 1 | 2 | 3 | (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.