Is there any reason why something like the following should not work?
while (condition)
{
a();
if (!condition)
break;
b();
}