My technique for a kid whining about a chore they're asked to do (or taking forever to do it, etc.), is that they get another chore to do after they finish that one. So they have to finish their current chore and then do another. Originally this was just for whining, but my oldest is now assigned to fold a basket of kid laundry sometimes. She'll take about ten minutes to fold a single item if she isn't nudged along. So I set a timer for 20 minutes. If she finishes in 20 minutes, she's done. If she doesn't, she still needs to finish that load, and then she has another load to do after that. It works *great*. Chore gets done fast, and then she can get on with other things. If she dawdles, oh well, at least more laundry gets folded. (She isn't able to keep up with kid laundry on her own, so I do some of the loads, so there's always a second load available). I think it's a lot more effective than being sent to one's room.
However, my youngest is only 2.5 and a little unclear on cleaning up after herself. If she does something like dump out a box of crayons and then not clean it up, she'll go in a timeout, and I'll bring her the box of crayons and scoop the crayons up and put them on the floor next to her, and she's in a timeout until she gets it done. Yes, moving the crayons and the box to the timeout corner is a little silly, as I could just put them in the box, but I'm trying to teach her to clean up after herself, so that she doesn't end up being the little brother in weeblewobble's story who doesn't know how to clean up after himself because his two big sisters do it for him.