I couldn't agree more with Liana. I make every effort not to yell at my 2.5 year old. I've lost my temper twice with him and both times he sobbed. I felt so terrible because I scared him and he wasn't even doing anything that bad. Most recently, he was playing in his baby brother's drawer and put the thermometer in his mouth. I had my hands full (I was pumping) and he wouldn't listen. After the third time, I yelled. My mom was a yeller and we all learned to tune her out really early.
That being said, I have the "Mom Voice" where I speak very clearly and stern. He knows the voice (most of the time). I've also mastered the "Mom Look", which he also knows. So, I don't want you to think I walk around with a "Sweetie Pie, please don't do that, honey. Ok, pumpkin?" attitude. When I mean business he knows.
I think we've gotten to this point because, like the other posters, I ask once and then I do, immediately. My little stinker knows when I'm feeding the baby (or pumping), or going to the bathroom though...and that's when he pushes. But, as soon as I can, I do. I'd say 99% of the time I follow through and make him do what I'm asking.
Try it for a week. If he's watching TV and not paying attention after you ask him to come eat - go over and turn it off. If he gets angry and starts back-talking, remain calm and say something like, "Son, I'm sorry you're angry, but you will not talk to me that way. Stop it right now or you will *insert consequence here*. If he continues, I'd do the consequence right away and STICK with it (I think that's a huge key). As soon as they know you will cave later on - they will use that.