Question: Is there anyway of calling methodB before methodA finishes, so that methodB gets executed? Ive tried numerous ways of implementing it, and none of them worked :(

---

can someone explain? Thanks.

```
public List<ObjectA> _OurObjectA= new List<ObjectA>();

public  List<ObjectA> methodA()
{

    List<ObjectA> products = new List<ObjectA>();
    ServiceReference1.ServiceClient client = 
      new ServiceReference1.ServiceClient();
    client.getProductCompleted += 
      new EventHandler<ServiceReference1.getProductCompletedEventArgs>(methodB);

    client.getProductAsync();

    return _OurObjectA;
}

void methodB(object sender, ServiceReference1.getProductCompletedEventArgs e)
{
    ObservableCollection<ServiceReference1.ObjectA> products = e.Result;
    foreach (ServiceReference1.ObjectA obj in products)
    {
        ObjectA temp = new ObjectA(obj);
        _OurObjectA.Add(temp);
    }
}

```

Answer: 
It looks like methodA calls a web service. When the web service is done it calls methodB. The confusing part is that this is [asynchronous](http://en.wikipedia.org/wiki/Asynchronous_I/O) (via the event handler)... methodA returns right away; it doesn't have to wait for the web service to finish.

This was probably done because the service takes a long time (relatively speaking), so in this case you can return from methodA right away, do some other work, and when the web service is done methodB can do it's stuff with the data returned from the web service. This is a more efficient use of resources. Sometimes this sort of thing is done so that the UI doesn't look like it's "hanging."
Your client object has an [event](http://msdn.microsoft.com/en-us/library/aa645739%28v=vs.71%29.aspx) called getProductCompleted. When that event is published, methodB is executed. client.getProductAsync() is an asynchronous call, meaning it will start downloading a product in the background even though the method will return immediately. When the product is finished downloading, the client publishes the event, causing methodB to be executed.