I've seeing the same behaviour. Waiting for yum tasks to complete take ages especially when in a list.
I've not looked at the code so not sure why this is happening but output from a ps auwwx every second shows the following when installing expect for example:
root 32466 11:08 0:00 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --disablerepo=* --pkgnarrow=installed --qf %{name}-%{version}-%{release}.%{arch} expect
root 32471 11:08 0:00 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --qf %{name}-%{version}-%{release}.%{arch} --whatprovides expect
root 32471 11:08 0:01 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --qf %{name}-%{version}-%{release}.%{arch} --whatprovides expect
root 32471 11:08 0:02 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --qf %{name}-%{version}-%{release}.%{arch} --whatprovides expect
root 32481 11:08 0:00 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --qf %{name}-%{version}-%{release}.%{arch} expect
root 32481 11:08 0:01 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --qf %{name}-%{version}-%{release}.%{arch} expect
root 32481 11:08 0:02 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --qf %{name}-%{version}-%{release}.%{arch} expect
root 32491 11:08 0:00 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-5.1.i386
root 32491 11:08 0:01 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-5.1.i386
root 32491 11:08 0:02 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-5.1.i386
root 32501 11:08 0:00 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-5.1.x86_64
root 32501 11:08 0:01 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-5.1.x86_64
root 32501 11:08 0:02 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-5.1.x86_64
root 32501 11:08 0:03 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-5.1.x86_64
root 32514 11:08 0:00 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-8.el5.i386
root 32514 11:08 0:01 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-8.el5.i386
root 32514 11:08 0:02 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-8.el5.i386
root 32514 11:08 0:03 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-8.el5.i386
root 32527 11:09 0:00 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-8.el5.x86_64
root 32527 11:09 0:01 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-8.el5.x86_64
root 32527 11:09 0:02 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-8.el5.x86_64
root 32527 11:09 0:03 /usr/bin/python -tt /usr/bin/repoquery --show-duplicates --plugins --quiet -q --pkgnarrow=updates --qf %{name}-%{version}-%{release}.%{arch} expect-5.43.0-8.el5.x86_64
So that's 22 seconds for one package. So if you have 20 packages or so assuming there are only a few versions in your repo you are looking at several minutes of package checking.
While the initial repo queries make sense I'm not sure I understand the iteration through each version?