|
Тема |
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() никога не се изпълнява и програмата зависва.
|
| |
|
|
|