2014-01-20 3 views
2

У меня была странная проблема сегодня ... Мой код работает на методе ожидания в C# (без ошибок или sth).Странная проблема с ожидающим оператором

user = await JsonConvert.DeserializeObjectAsync<User>(content); 

но когда я удалить "ждать" мой код работает ...

user = JsonConvert.DeserializeObjectAsync<User>(content).Result; 

У меня такая же проблема с моим HTTPClient:

Работы

using (HttpResponseMessage response = client.PostAsync(url, posts).Result) 

Не работает

using (HttpResponseMessage response = await client.PostAsync(url, posts)) 

проблема не была там днем ​​раньше, и если я поместить свой код в другом классе он работает правильно

выход:

The thread 0xe44 has exited with code 259 (0x103). 
The thread 0x81c has exited with code 259 (0x103). 
The thread 0x150c has exited with code 259 (0x103). 
The thread 0x1660 has exited with code 259 (0x103). 

Я переделали, и я до сих пор эту проблему.

Кто-нибудь знает ответ?

+0

Вы работаете в потоке пользовательского интерфейса? Является ли поток пользовательского интерфейса заблокированным, ожидая чего-то еще? – SLaks

+2

Обратите внимание, что эти функции не должны существовать в первую очередь; вы должны явно оставить поток пользовательского интерфейса выше, используя 'Task.Run()'. https://github.com/JamesNK/Newtonsoft.Json/issues/66 http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx – SLaks

+0

Ow Я вижу сейчас, у меня было для вызова моей функции из моего интерфейса с оператором ожидания. –

ответ

5

Вы столкнулись с common deadlock issue, которые я описываю в своем блоге.

Чтобы решить эту проблему, используйте await; удалите любые Task.Wait или Task<T>.Result звонки с вашего кода.

Смежные вопросы