func sync<T>(execute work: () throws -> T) rethrows -> T {
        try syncQueue.sync { try work() }
    }