<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def iter_dialogs( self, offset_date: int = 0, limit: int = 0 ) -> Generator["pyrogram.Dialog", None, None]: """Use this method to iterate through a user's dialogs sequentially. This convenience method does the same as repeatedly calling :meth:`get_dialogs` in a loop, thus saving you from the hassle of setting up boilerplate code. It is useful for getting the whole dialogs list with a single call. Args: offset_date (``int``):
 The offset date in Unix time taken from the top message of a :obj:`Dialog`. Defaults to 0 (most recent dialog). limit (``str``, *optional*):
 Limits the number of dialogs to be retrieved. By default, no limit is applied and all dialogs are returned. Returns: A generator yielding :obj:`Dialog <pyrogram.Dialog>` objects. Raises: :class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error. """

        current = 0
        total = limit or (1 << 31) - 1
        limit = min(100, total)

        pinned_dialogs = self.get_dialogs(
            pinned_only=True
        ).dialogs

        for dialog in pinned_dialogs:
            yield dialog

            current += 1

            if current >= total:
                return

        while True:
            dialogs = self.get_dialogs(
                offset_date=offset_date,
                limit=limit
            ).dialogs

            if not dialogs:
                return

            offset_date = dialogs[-1].top_message.date

            for dialog in dialogs:
                yield dialog

                current += 1

                if current >= total:
                    return