First question, do the tasks differ from each other? If not you could create only one task and assign it to both teams and whoever claims the task first will do the job.
If that is not the case, you could use interrupting boundary events (currently supported on sub process only) so when first task completes it throws an signal event at each task is listening for such signal whenever such signal arrives it cancels activity that it is bound to.
Thanks for the direction, I will try the interrupting boundary events as the exapmle I gave was a simplification of the workflow. Enabling the cancelation of the sub processes via events looks like the best way for me to implement my work flow. I will feed back my soulution when it is implemented.