Photon/P1 loop()/user code blocking in SEMI_AUTOMATIC mode

@bing1106, I’m not sure if you actually tested how long application code is blocked during connection attempts.
But if you want to get a feeling how the Photon behaves in your outlined scenario have a play with this code

SYSTEM_MODE(SEMI_AUTOMATIC);

const uint32_t waitConnect = 5000; // at least 5 sec between reconnect attempts

uint32_t msConnect;
bool firstAttempt;

void setup() 
{
    pinMode(D7, OUTPUT);
    WiFi.connect();
    firstAttempt = false;
}

void loop() 
{
    if (firstAttempt && Spark.connected())
    {
        firstAttempt = false;
    }
    else if(!firstAttempt  && !Spark.connected())
    {
        Spark.connect();
        firstAttempt = true;
        msConnect = millis();
    }

    digitalWrite(D7, millis() & 0x80); // blink every 256ms
}

When looking at the onboard LED, you’ll see that it does not block permanentliy till a cloud connection is reestablished, but only for up to 5sec (on my device this is).
If your code can cope with this kind of blocking periode, you can even get away without any interrupts.