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."
And there's apparently an error in methodB:

```
 foreach (ServiceReference1.ObjectA obj in products)
    {
        ObjectAtemp = new ObjectA(obj);
         // no temp -- there should be a space between ObjectA and temp in the line above
         // perhaps just a typo here on SO? or in the original code?
         // EDIT: I see the code in methodB has now been corrected.
         _OurObjectA.Add(temp);
    }

```