
Nikolay
18.03.2017
15:43:11
В хтмл это вроде как должно работать, но не работает
Беглое гугление сказало, что можно запретить разрыв самой строки
А по поводу разрыва перед строкой ничего не нагуглил
В хтмл нашел интересную либу, которая конвертит хтмл в пдф с поддержкой нужных мне фитч, но она стоит 3800 долларов ?

Google

Ilya
18.03.2017
15:50:26

Nikolay
18.03.2017
15:52:10
Не отрывать от следующего похоже то, что мне нужно
Спасибо


Ilya
18.03.2017
15:52:20
именно!
Вот есть async, в нём есть await.
Всё это начинает работать, а потом встречается с незавершённой задачей. И возвращает её, разблокируя thread. Если у нас UI, то он не виснет, может реагировать на ещё что-нибудь, а тот метод когда-нибудь завершится. Кто бы ещё сказал, как, если он уже returned.
Это ладно, хоть как-то понятно.
А если нет UI, то какой вообще смысл в Context и прочем, если продолжиться оно может только получив результат с Awaitable и использовав его в дальнейшем.
Что тут вообще асинхронно и так ли уж плохо
Task.Run(async () => await AsyncMethod()).Result;
?
async/await это просто синтаксический сахар над таксом, когда, как ты пишешь, тред разблокируется, захватывается текущий SynchonizationContext и после выполнения задачи, остаток метода передастся в SynchronizatonContext.Send/Post
Вот есть async, в нём есть await.
Всё это начинает работать, а потом встречается с незавершённой задачей. И возвращает её, разблокируя thread. Если у нас UI, то он не виснет, может реагировать на ещё что-нибудь, а тот метод когда-нибудь завершится. Кто бы ещё сказал, как, если он уже returned.
Это ладно, хоть как-то понятно.
А если нет UI, то какой вообще смысл в Context и прочем, если продолжиться оно может только получив результат с Awaitable и использовав его в дальнейшем.
Что тут вообще асинхронно и так ли уж плохо
Task.Run(async () => await AsyncMethod()).Result;
?
смысл в потоке выполнения, твой таск может находиться в выполняемом состоянии неограниченное время без блокировки потока и требовать дополнительного потока на ожидание
Вот есть async, в нём есть await.
Всё это начинает работать, а потом встречается с незавершённой задачей. И возвращает её, разблокируя thread. Если у нас UI, то он не виснет, может реагировать на ещё что-нибудь, а тот метод когда-нибудь завершится. Кто бы ещё сказал, как, если он уже returned.
Это ладно, хоть как-то понятно.
А если нет UI, то какой вообще смысл в Context и прочем, если продолжиться оно может только получив результат с Awaitable и использовав его в дальнейшем.
Что тут вообще асинхронно и так ли уж плохо
Task.Run(async () => await AsyncMethod()).Result;
?
например, ты отправляешь сообщение о начале процесса и потом кто то присылает оповещение о его завершении. в синхронной реализации ты должен отправить запрос и блокировать поток до тех пор, пока не придёт ответ. С Asyn await в этом нет необходимости, ты отправляешь запрос и создаёшь TaskCompletitionSource, и потом, когда придёт ответ ты сможешь продолжить выполнение своего кода в каком нибудь потоке из ThreadPool. То есть в момент ожидания ты не блокируешь никаких потоков


Vladimir
18.03.2017
16:09:00
пиплы? есть кто пишет под иос на шарпе?

Nikita
18.03.2017
16:13:18
бесплатно и рендерит настоящим вебкитом

Nicholas
18.03.2017
16:14:05
Да оно норм, только хром не может в печать нормально
Серьёзно, ишак лучше работает

Nikita
18.03.2017
16:14:15

Google

Nikita
18.03.2017
16:14:21
боль и унижение
чтобы нормально мог в печать

Anatoli
18.03.2017
16:14:56
добрый вечер, Windows 10, HttpUtility или WebUtility.Urldecode возвращают знаки вопроса вместо любых нелатинских символов, как починить? На вход приходит закодированная часть урла из запроса

Nikita
18.03.2017
16:15:30
Uri.UnescapeDataString
ну и есть вариант, что у тебя в url cp1251 как-то затесалась
но это терминальный случай

Nikolay
18.03.2017
16:16:49

Anatoli
18.03.2017
16:17:00
Uri.UnescapeDataString не помогло

Nikolay
18.03.2017
16:17:56
Да и патчат его неохотно

Vladimir
18.03.2017
16:32:20
то есть помочь никто мне не может?
на замаринформах было несколько проектов
боль и унижение

Arseniy
18.03.2017
16:50:31

Anatoli
18.03.2017
16:54:53
отправляю GET запрос из Postman ..../Player%D0%B93/.... затем после парсинга HttpListenerRequest.RawUrl получаю Player%D0%B93 ... затем декодирую и получаю Player?

Arseniy
18.03.2017
16:55:44
ну так запрос в оригинале
дай что получается
и что надо получить


ACx0
18.03.2017
16:56:11
например, ты отправляешь сообщение о начале процесса и потом кто то присылает оповещение о его завершении. в синхронной реализации ты должен отправить запрос и блокировать поток до тех пор, пока не придёт ответ. С Asyn await в этом нет необходимости, ты отправляешь запрос и создаёшь TaskCompletitionSource, и потом, когда придёт ответ ты сможешь продолжить выполнение своего кода в каком нибудь потоке из ThreadPool. То есть в момент ожидания ты не блокируешь никаких потоков
Стало чуть понятнее, что за ними стоит, хорошо.
Но вот есть у меня какой-нибудь метод, пусть даже async (и вызвали его, например, из консольного Main, завернув в Task, чтобы не словить deadlock), внутри него вызывается другой такой же, с использованием await. Следующая же строчка использует результат работы Awaitable. Что здесь может не блокироваться? Всё же в полном блоке, пока запрос идёт, просто нечему работать до его завершения.
Кривовато написал, вот стэк вызовов, чтобы уточнить.
Stack:
RequestAsync();
DecodeAsync();
Main();


Anatoli
18.03.2017
17:07:51
запрос localhost:8080/players/PlayerЙ/info (Й кодируется постманом в %D0%B93)
нужно сравнить PlayerЙ в нижнем регистре с именем игрока из базы данных и вернуть Json в ответ
тут начинаются проблемы: как запись из базы с кириллицей так и PlayerЙ при декодировании возвращают некорректные символы и сравнение в нижнем регистре не работает
так же при извлечении записи с кириллицей из БД и сериализации в Json опять же некорректные символы: вот так уже выглядит извлеченный PlayerЙ из базы в Jsonе - PlayerЙ
БД Sqlite EF6 CodeFirst

productionneuh
18.03.2017
17:07:58
https://pp.userapi.com/c636323/v636323949/4f200/JNNk4xwjMAY.jpg

Google

productionneuh
18.03.2017
17:08:09
с этой стр пизжу с заказчиками
vk.com/asmjs
просто pzdc

Ilya
18.03.2017
17:23:57
Стало чуть понятнее, что за ними стоит, хорошо.
Но вот есть у меня какой-нибудь метод, пусть даже async (и вызвали его, например, из консольного Main, завернув в Task, чтобы не словить deadlock), внутри него вызывается другой такой же, с использованием await. Следующая же строчка использует результат работы Awaitable. Что здесь может не блокироваться? Всё же в полном блоке, пока запрос идёт, просто нечему работать до его завершения.
когда у тебя начнётся действительная асинхронность после request async у тебя программа завершит работу потому что void Main и он не дожидается завершения
и завешшит программу

Vyacheslav
18.03.2017
17:25:58
и завешшит программу
и как с этим бороться? поставить ожидание до тех пор пока не будет получен результат?

Ilya
18.03.2017
17:27:34
использовать синхронный вариант, в целом - да. как работают Wpf Winforms, основной поток программы боликоруется вызовом Application.Run и запускается поток диспатчера

Arseniy
18.03.2017
17:31:13

Ilya
18.03.2017
17:32:14
но если просто надо запустить асинхронный метод синхронно, то можно обратиться к Task.Result или вызвать Task.Wait() а потом считать результат, или вызвать RunSynhronously

Arseniy
18.03.2017
17:32:55
@@anatoli_dubko я постманом не пользуюсь, потому понятия не имею, чо он там делает. далее ты говоришь про бд. и не ясно как она тут встряла. могут туда попадать кривые данные или не

Ilya
18.03.2017
17:33:02
способов много, но все они приведут к блокировке (deadlock), если задан syncronization context и не задан ConfigureAwait(false)

Anatoli
18.03.2017
17:34:24
localhost:8080/players/Player%D0%99/info

ACx0
18.03.2017
17:35:27

Arseniy
18.03.2017
17:36:24
@anatoli_dubko довай дальше, что там еще у тебя неправильно кодирует

Ilya
18.03.2017
17:37:11

ACx0
18.03.2017
17:37:50

Arseniy
18.03.2017
17:39:51
Стало чуть понятнее, что за ними стоит, хорошо.
Но вот есть у меня какой-нибудь метод, пусть даже async (и вызвали его, например, из консольного Main, завернув в Task, чтобы не словить deadlock), внутри него вызывается другой такой же, с использованием await. Следующая же строчка использует результат работы Awaitable. Что здесь может не блокироваться? Всё же в полном блоке, пока запрос идёт, просто нечему работать до его завершения.
ты понимаешь, что такси - это очередь, которая выполняется на пуле потоков? и когда таска завершается, управление передается ее "продолжению" через ту же самую очередь?

ACx0
18.03.2017
17:40:21

Google

Arseniy
18.03.2017
17:40:26
при чем тут мейн? в мейне ты тока можешь синхронно ждать результат и всё

ACx0
18.03.2017
17:41:26

Arseniy
18.03.2017
17:42:28
не пометить, и что?

ACx0
18.03.2017
17:42:46

Arseniy
18.03.2017
17:43:40
Вот есть async, в нём есть await.
Всё это начинает работать, а потом встречается с незавершённой задачей. И возвращает её, разблокируя thread. Если у нас UI, то он не виснет, может реагировать на ещё что-нибудь, а тот метод когда-нибудь завершится. Кто бы ещё сказал, как, если он уже returned.
Это ладно, хоть как-то понятно.
А если нет UI, то какой вообще смысл в Context и прочем, если продолжиться оно может только получив результат с Awaitable и использовав его в дальнейшем.
Что тут вообще асинхронно и так ли уж плохо
Task.Run(async () => await AsyncMethod()).Result;
?
вот про это
ConfigureAwait как раз задает, кто дожен процессить результат

ACx0
18.03.2017
17:44:15
не пометить, и что?
То что велика ли разница, сделать всё async и вызывать через таск в main или в тех методах, где, скажем, httpclient, сделать такой вызов?

Sergey
18.03.2017
17:44:33
Это норм?

Admin
ERROR: S client not available

ACx0
18.03.2017
17:44:51

Arseniy
18.03.2017
17:45:31
@Hi10pH264 представь себе набор очередей. у UI-потока очередь своя. есть стандартный пул. можно своих наплодить

Sergey
18.03.2017
17:45:33
А если серьезно?(

ACx0
18.03.2017
17:45:53

Arseniy
18.03.2017
17:47:15
@Hi10pH264 когда ты делаешь ConfigureAwait(false) тебе плевать, куда вернется твоя задача. а когда ConfigureAwait(true) - важно (примеры - UI, wpf, asp.net mvc контроллеры, orleans)

ACx0
18.03.2017
17:48:04

Arseniy
18.03.2017
17:48:18
как эта
ты же можешь строить цепочки из авайтов

Google

Arseniy
18.03.2017
17:49:25
и тебе грубо говоря надо в месте старта получить только результат цепочки, а все промежуточные пусть исполняются на дефолтном пуле

ACx0
18.03.2017
17:49:56
Допустим, эта цепочка прыгает по потокам как попало (ещё раз: разве они вообще есть при await?), самый последний должен вернуть всё в место вызова.
Во, одно и то же написали, это хорошо.
И, далее, зачем вообще всё ограничивать контекстом, если вернётся туда же?
Какой смысл в true вообще?

Arseniy
18.03.2017
17:51:41
ну ты представляешь, как работает await?

Ilya
18.03.2017
17:51:47

Arseniy
18.03.2017
17:52:34
@Hi10pH264 раньше мы все писали .ContinueWith(yobaLambda)

Ilya
18.03.2017
17:52:56

Arseniy
18.03.2017
17:53:51
и yobaLambda могла быть исполнена где угодно.
async/await считай что сахар (тебе не должно волновать во что енто компелица)
всё что стоит под await - это yobaLambda

ACx0
18.03.2017
17:54:16

Ilya
18.03.2017
17:55:03

Arseniy
18.03.2017
17:55:16
@Hi10pH264 и прикинь, ты стартуешь из контроллера, где у тебя есть есть какой-то юзер, культура и тд и тп. а закончил работу там, где всего это нет.
если тебе похеру на контекст, то всё ок. если нет, то тебе надо вернуться в исходный контекст
таски - это ахуеть какая сложная конструкция
чо уж говорить. они впихнули в них вообще всё, что можно тока было запихнуть

ACx0
18.03.2017
17:57:16
@Hi10pH264 и прикинь, ты стартуешь из контроллера, где у тебя есть есть какой-то юзер, культура и тд и тп. а закончил работу там, где всего это нет.
если тебе похеру на контекст, то всё ок. если нет, то тебе надо вернуться в исходный контекст
Итого, я не понимаю, куда всё это возвращается.
И как вообще оно может вернуться не пойми куда, а не строго туда, откуда изначально вызвано.

Arseniy
18.03.2017
17:57:29
https://msdn.microsoft.com/ru-ru/library/system.threading.synchronizationcontext(v=vs.110).aspx

Ilya
18.03.2017
17:58:48

Arseniy
18.03.2017
18:01:06
@Hi10pH264 вот если у тебя UI, wpf, asp.net mvc контроллеры, orleans), ты вернешься откуда начал
в случае UI это будет тот же поток, но в целом, это не обязательно
главное что для лямбды внутри таски - это будет практически не отличимо

Летучая
18.03.2017
18:07:49
Господа-сеньоры

ACx0
18.03.2017
18:08:38
Эта группа больше не существует