When using Begin/End methods to asynchronously invoke a method, my
understanding is that you always need to call the End method or
resources will be leaked.

But let's say I'm calling a web service and want the user to be able
to cancel it:

IAsyncResult result = proxy.BeginWebService(...);

while (!result.IsCompleted)
{
  Thread.Sleep(500);

  if (backgroundWorker.CancellationPending)
  {
    // we need to make sure EndWebService gets called
    ThreadPool.QueueUserWorkItem(delegate { proxy.EndWebService(result); });
    return;
  }
}

proxy.EndWebService(result);

Would that be the correct way to go about it? If the user wants to
cancel, I need to bail out of the loop, but I also need to make sure
EndWebService gets called. I don't want to make the user wait for the
web service call to complete, so is it ok to have the thread pool make
the EndWebService call?

-John

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to