Difficult patterns to optimize for is my experience if any IO or network boundaries are in play. Even that and it sometimes seems the more knowledge on how threading works on one particular cpu architecture.
So for me at least, on a high level these patterns seem easy enough and seems to play well in to the popculcural small service fad and large data processing. But be aware of the underlying cpu architecture and threading and how thread pools work on your particular OS.
Oh yes and then comes the debugging and reading the code part, which we all know are where the real efforts of time comes to play.
Use these when absolutely no other options are available. Just like multithreading.