private void StartNewSessionIfTimedOut(DateTimeOffset activityStartedAt)
{
// Two threads could trigger activities back to back after a session ends, e.g. restarting the app
// after some time spent suspended. Only let one of them cause a new session to be started.
while (TimeSinceLastActivity(activityStartedAt) > timeout)
{
lock (newSessionLock)
{
if (TimeSinceLastActivity(activityStartedAt) > timeout)
StartNewSession(activityStartedAt);
lastActivityAt = activityStartedAt;
}
}
}