mcorluka
mcorluka

Reputation: 55

Execute line of code after returning value

I'm trying to execute code after yield return. I have WebMethod that call's another method and I want to do some staff after returning value to WebMethod (execute method setNextCampaign()) Here is my code:

[WebMethod]
public long NextCall(long UserID)
{
    CampaignManagerExtended cacheCampaignManager = fillCampaignManager(false);

    return cacheCampaignManager.NextCall(UserID).First();
}



public IEnumerable<long> NextCall(long UserID)
        {
            UserExtended ue = null;
            try
            {
                if (!CacheUsers.ContainsKey(UserID))
                    AddUser(UserID);

                ue = CacheUsers.First(p => p.Key == UserID).Value;
                if (ue.NextCampaign != null)
                {
                    QueueItemPersonal qp = ue.NextFromPersonalQueue();
                    if (qp != null)
                    {

                        yield return qp.CampaignPersonID;
                    }
                    else 
                    { 
                        QueueItemScheduled qs = ue.NextCampaign.NextFromScheduleQueue();
                        if (qs != null)
                        {

                            yield return qs.CampaignPersonID;
                        }
                        else 
                        { 
                            QueueItemGeneral qg = ue.NextCampaign.NextFromGeneralQueue();
                            if (qg != null)
                            {

                                yield return qg.CampaignPersonID;
                            }                  
                            else
                                 yield return 0;
                        }
                    }
                    ue.NextCampaign.fillGeneralQueue();
                    ue.setNextCampaign();
                }
                else
                    yield return 0;

            }
            //catch
            //{
            //    yield return 0;
            //}
            finally
            {

            }
        }

Any ideas?

Upvotes: 2

Views: 8287

Answers (2)

Ashigore
Ashigore

Reputation: 4678

Just save the yeild until you are ready to return it:

[WebMethod]
public long NextCall(long UserID)
{
    CampaignManagerExtended cacheCampaignManager = fillCampaignManager(false);

    return cacheCampaignManager.NextCall(UserID).First();
}

public IEnumerable<long> NextCall(long UserID)
{
    int returnID;
    UserExtended ue = null;

    try
    {
        if (!CacheUsers.ContainsKey(UserID))
        {
            AddUser(UserID);
        }

        ue = CacheUsers.First(p => p.Key == UserID).Value;

        if (ue.NextCampaign != null)
        {
            QueueItemPersonal qp = ue.NextFromPersonalQueue();

            if (qp != null)
            {
                returnID =  qp.CampaignPersonID;
            }
            else 
            { 
                QueueItemScheduled qs = ue.NextCampaign.NextFromScheduleQueue();

                if (qs != null)
                {
                    returnID  = qs.CampaignPersonID;
                }
                else 
                { 
                    QueueItemGeneral qg = ue.NextCampaign.NextFromGeneralQueue();

                    if (qg != null)
                    {
                        returnID = qg.CampaignPersonID;
                    }                  
                    else
                    {
                         returnID = 0;
                    }
                }
            }

            ue.NextCampaign.fillGeneralQueue();
            ue.setNextCampaign();
        }
        else
        {
            returnID = 0;
        }

        yield return returnID;
    }
    //catch
    //{
    //    yield return 0;
    //}
    finally
    {

    }
}

Upvotes: 2

Dialecticus
Dialecticus

Reputation: 16769

Instead of this

<some stuff>;
yield return <something>;
<some epilog stuff that should be executed after yield>

do this:

try
{
  <some stuff>;
  yield return <something>;
}
finally
{
  <some epilog stuff that should be executed after yield>
}

Upvotes: 5

Related Questions