Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2011-09-15

Silverlight async calls


На заре вебдванольности, да и раньше, нам не хватало асинхронности. Была масса задач, которые хорошо было бы запускать в фоне. Выкручивались как-то, то имитировали асинхронность, то костыльки подставляли.

Теперь, когда рулит сеть, редко где найдешь синхронную обработку сетевого вызова. А иногда надо. Зачем мне два байта пересылать в асинхроне? Гораздо удобнее сделать это старым добрым синхронным способом. Но нет, не положено.
Теперь выкручиваемся в обратную сторону. Имитируем синхронность и костыльки подставляем. Нет в жизни щастя.

Как имитировать синхронность в Silverlight:

All network calls are Invoked on the UI thread, so if you attempt to block the UI thread after triggering the async call, the call ends up queued behind your current call. So what you can do to achieve linear processing is to do it on a background thread, and step it along with ResetEvents, i.e.
Make async network call on background thread
Block background thread with ResetEvent.Wait().
Async call executes on UI Thread.
In the async callback, which is Invoked on the UI thread, call ResetEvent.Set() letting the background thread continue.
Rinse and Repeat.
It's ugly, but it's a limitation imposed by the current browser plugin APIs.

forums.silverlight.net/t/83357
там и пример кода есть.


А есть фреймворк (не разбирался пока), обещают сопроцедуры:

Coroutines – Any action can optionally choose to return IResult or IEnumerable<IResult>, opening the door to a powerful approach to handling asynchronous programming. Furthermore, implementations of IResult have access to an execution context which tells them what ActionMessage they are executing for, what FrameworkElement triggered the messsage to be sent, what instance the ActionMessage was handled by (invoked on) and what the View is for that instance. Such contextual information enables a loosely-coupled, declarative mechanism by which a Presenter or View-Model can communicate with it’s View without needing to hold a reference to it at any time.

caliburnmicro.codeplex.com/ IResult and Coroutines

developer.mindtouch.com/Dream/Tutorials/Using_Coroutines_for_Asynchronous_programming

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)