Thanks Miguel, Jake and others. You are right... I forgot to use BackgroundWorker... :p
On Wed, Aug 12, 2009 at 11:04 PM, Miguel Madero <m...@miguelmadero.com> wrote: > Asheesh, > > I'm comparing the different approaches, the one in StackOverFlow works > well, this is what I don't like: > * I think it's hard to work with multiple services using events instead of > callbacks (as in my example), > * They're using an AutoResetEvent, which we get for free if we use the > callbacks, so that means less things to set up. > * They're using a BackgroundWorker and a Thread > * They're using an event to notify, which is really not necessary (altough > a clear). We could directly do whatever we need after the WaitOne or after > calling Start (instead of raising the event). > * They're starting the BackgroundWorker and leave it there just waiting, > this should be done only just before calling the services. > * The event should be raised on the UI Thread > > I did some changes to that sample. I can send it to you as a reference. > I don't think it would make a huge difference in performance, since any > perf hit due to thread synchronization logic would be nothing compare to > multiple service calls. However, I've not had a chance to do any perf > testing. > > > *BTW. *I think you forgot to use the BackgroundWorker and that's why when > you tried to use this approach the application was locked on the first > WaitOne since it was done in the UI Thread (just as the even returning from > the ServiceCall). > > > > On Wed, Aug 12, 2009 at 10:24 PM, Miguel Madero <m...@miguelmadero.com>wrote: > >> Attached is a brief example on how to do this using the WaitHandle in the >> IAsyncResult returned by each async method. >> >> The code is simple. In Silverlight I just do 10 service call that will add >> an item to a ListBox. I'll wait until all the service calls end to add >> another message to the list (this has to run in a different thread to avoid >> blocking the UI). Also note that adding items to the list have to be done >> through the Dispatcher sicne they will modify the UI. There're a bunch of >> lamdas, but it's easy to follow. >> >> >> public MainPage() >> { >> InitializeComponent(); >> var results = new ObservableCollection<string>(); >> var asyncResults = new List<IAsyncResult>(); >> resultsList.ItemsSource = results; >> var service = new Service1Client() as Service1; >> >> 1.To(10).Do(i=> >> asyncResults.Add(service.BeginDoWork(ar => >> Dispatcher.BeginInvoke(() => >> results.Add(String.Format("Call {0} finished: {1}", i, >> service.EndDoWork(ar)))), >> null)) >> ); >> >> new Thread(()=> >> { >> asyncResults.ForEach(a => a.AsyncWaitHandle.WaitOne()); >> Dispatcher.BeginInvoke(() => results.Add("Everything >> finished")); >> }).Start(); >> } >> >> Just to help with the testing, this is the service >> >> public class Service1 >> { >> private const int maxMilliSecs = 500; >> private const int minMillisSecs = 100; >> [OperationContract] >> public int DoWork() >> { >> int millisSecsToWait = new Random().Next(maxMilliSecs - >> minMillisSecs) + minMillisSecs; >> Thread.Sleep(millisSecsToWait); >> return millisSecsToWait; >> } >> } >> >> >> >> On Wed, Aug 12, 2009 at 9:21 PM, Miguel Madero <m...@miguelmadero.com>wrote: >> >>> Ali is going to give a talk on the Rx framework at the next SDDN Event in >>> Sydney :) >>> >>> On Wed, Aug 12, 2009 at 7:48 PM, Jordan Knight < >>> jordan.kni...@readify.net> wrote: >>> >>>> I had a quick look at this the other day and when I compiled up the >>>> reactive dll, the classes were different that in the example: >>>> >>>> >>>> >>>> ObservableExtensions >>>> >>>> DoAsync >>>> >>>> Didn't exist? >>>> >>>> >>>> >>>> I didn't really examine where I was going wrong in any great depth, so >>>> If you have any success I'd be interested to hear about it :) >>>> >>>> >>>> >>>> >>>> >>>> *Jordan Knight* >>>> Readify | Senior Consultant >>>> Lead Trainer - Rich Interactive Media >>>> >>>> Suite 408 LifeLabs Building | 198 Harbour Esplanade | Docklands | VIC >>>> 3008 | Australia >>>> >>>> M: +61 403 532 404 | E: jordan.kni...@readify.net | W: >>>> http://www.readify.net | B: http://blog.webjak.net >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> *From:* ozsilverlight@ozsilverlight.com [mailto: >>>> ozsilverli...@ozsilverlight.com] *On Behalf Of *Jake Ginnivan >>>> >>>> *Sent:* Wednesday, 12 August 2009 6:32 PM >>>> *To:* OzSilverlight@ozsilverlight.com >>>> *Subject:* RE: Wait for multiple Async calls to finish (SL3) >>>> >>>> >>>> >>>> >>>> http://themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html >>>> >>>> >>>> >>>> Have a look at this, the Silverlight team use it in their unit testing. >>>> I still have not used it yet, but really keen to dive in and use this >>>> stuff. >>>> >>>> >>>> >>>> *Jake Ginnivan* >>>> >>>> IT Coordinator >>>> >>>> >>>> >>>> ioGlobal Pty Ltd. >>>> >>>> ISO 9001 Quality Certified >>>> >>>> *Resource **Analytics** & Data Systems **Automation*** >>>> >>>> T: +61 8 6555 6510 >>>> >>>> F: +61 8 6311 3256 >>>> >>>> M: +61 403 846 400 >>>> >>>> E: *jake.ginni...@ioglobal.net*** >>>> >>>> www.ioglobal.net >>>> >>>> >>>> >>>> *From:* OzSilverlight@ozsilverlight.com [mailto: >>>> ozsilverli...@ozsilverlight.com] *On Behalf Of *Asheesh Soni >>>> *Sent:* Wednesday, 12 August 2009 3:49 PM >>>> *To:* OzSilverlight@ozsilverlight.com >>>> *Subject:* Wait for multiple Async calls to finish (SL3) >>>> >>>> >>>> >>>> Any one knows a better / cleaner way to do this than: >>>> >>>> http://silverlight.net/forums/t/12437.aspx >>>> http://silverlight.net/forums/t/72631.aspx >>>> >>>> I have already dumped daisy-chaining of calls in favor of multiple async >>>> calls with a boolean flag for each. >>>> After calling all the async operations, I am using a DispatcherTimer >>>> ticker event to poll if all the flags have been set. >>>> Works like a charm, and a huge improvement in performance and >>>> readability over the chaining. But still not the perfect solution. >>>> >>>> I couldn't get this one to work: >>>> >>>> http://stackoverflow.com/questions/811855/threading-multiple-async-calls-silverlight >>>> The thread sleeps for ever on the 1st .waitone call. >>>> >>>> Any ideas? >>>> ------------------------------ >>>> >>>> Support procedure: https://www.codify.com/lists/support >>>> List address: ozsilverlight@ozsilverlight.com >>>> Subscribe: ozsilverlight-subscr...@ozsilverlight.com >>>> Unsubscribe: ozsilverlight-unsubscr...@ozsilverlight.com >>>> List FAQ: http://www.codify.com/lists/ozsilverlight >>>> Other lists you might want to join: http://www.codify.com/lists >>>> ------------------------------ >>>> >>>> Support procedure: https://www.codify.com/lists/support >>>> List address: ozsilverlight@ozsilverlight.com >>>> Subscribe: ozsilverlight-subscr...@ozsilverlight.com >>>> Unsubscribe: ozsilverlight-unsubscr...@ozsilverlight.com >>>> List FAQ: http://www.codify.com/lists/ozsilverlight >>>> Other lists you might want to join: http://www.codify.com/lists >>>> ------------------------------ >>>> Support procedure: https://www.codify.com/lists/support >>>> List address: ozsilverlight@ozsilverlight.com >>>> Subscribe: ozsilverlight-subscr...@ozsilverlight.com >>>> Unsubscribe: ozsilverlight-unsubscr...@ozsilverlight.com >>>> List FAQ: http://www.codify.com/lists/ozsilverlight >>>> Other lists you might want to join: http://www.codify.com/lists >>>> >>> >>> >>> >>> -- >>> Miguel A. Madero Reyes >>> www.miguelmadero.com (blog) >>> m...@miguelmadero.com >>> ------------------------------ >>> Support procedure: https://www.codify.com/lists/support >>> List address: ozsilverlight@ozsilverlight.com >>> Subscribe: ozsilverlight-subscr...@ozsilverlight.com >>> Unsubscribe: ozsilverlight-unsubscr...@ozsilverlight.com >>> List FAQ: http://www.codify.com/lists/ozsilverlight >>> Other lists you might want to join: http://www.codify.com/lists >>> >> >> >> >> -- >> Miguel A. Madero Reyes >> www.miguelmadero.com (blog) >> m...@miguelmadero.com >> ------------------------------ >> Support procedure: https://www.codify.com/lists/support >> List address: ozsilverlight@ozsilverlight.com >> Subscribe: ozsilverlight-subscr...@ozsilverlight.com >> Unsubscribe: ozsilverlight-unsubscr...@ozsilverlight.com >> List FAQ: http://www.codify.com/lists/ozsilverlight >> Other lists you might want to join: http://www.codify.com/lists >> > > > > -- > Miguel A. Madero Reyes > www.miguelmadero.com (blog) > m...@miguelmadero.com > ------------------------------ > Support procedure: https://www.codify.com/lists/support > List address: ozsilverlight@ozsilverlight.com > Subscribe: ozsilverlight-subscr...@ozsilverlight.com > Unsubscribe: ozsilverlight-unsubscr...@ozsilverlight.com > List FAQ: http://www.codify.com/lists/ozsilverlight > Other lists you might want to join: http://www.codify.com/lists > -------------------------------------------------------------------------------- Support procedure: https://www.codify.com/lists/support List address: ozsilverlight@ozsilverlight.com Subscribe: ozsilverlight-subscr...@ozsilverlight.com Unsubscribe: ozsilverlight-unsubscr...@ozsilverlight.com List FAQ: http://www.codify.com/lists/ozsilverlight Other lists you might want to join: http://www.codify.com/lists