Ross, You're totally right, altough isn't as fun, that'll definitely perfom better and should be the first option. I let myself go straight to VS to hack some code and completely overlooked this.
On Wed, Aug 12, 2009 at 11:35 PM, Ross Jempson < ross.jemp...@michaelhill.com.au> wrote: > Whilst the synchronising discussion is interesting in itself, perhaps the > original problem could be solved by batching your logically grouped > operations. Assuming you ‘own’ the services, you could create less granular > methods which return aggregated ‘datacontracts’. > > > > A variation of this idea is implemented quite nicely in ADO.NET data > services, by supplying multiple DataServiceRequest to > DataServiceContext.BeginExecuteBatch you get better performance and don’t > have to synchronise the callbacks. > > > > (I’m only using that as an example by the way, as you can’t call custom > service methods within a batch within that framework.) > > > > *From:* Miguel Madero [mailto:m...@miguelmadero.com] > *Sent:* Wednesday, 12 August 2009 11:04 PM > *To:* ozsilverlight@ozsilverlight.com > *Subject:* Re: Wait for multiple Async calls to finish (SL3) > > > > 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 > ______________________________________________________________________ > This email has been scanned by the MessageLabs Email Security System. > For more information please visit http://www.messagelabs.com/email > ______________________________________________________________________ > ------------------------------ > 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