Yeah, I'm with Alan - what works in theory and what works in practice can really vary with the site - if you do both at once and something goes wrong, you won't know which tactic was the problem. Even if it goes right, you won't know which one worked.
Keep in mind, too, that 301s and canonicals have different purposes. They may act similarly for search, in some cases, but they're very different for site visitors. A 301-redirect will actually take the visitor to a new page. A canonical will let the duplicate URL be visited but remove it from search results. In most cases, one is more appropriate to your situation than the other.