SqlDataAdapter.Remplissez - approche Asynchrone

À L'Aide De C# /.NET 3.5.

Actuellement, je suis le remplissage de 2 tables de données, l'un après l'autre à l'aide de SqlDataAdapter.Fill().

Je veux remplir les deux de ces tables de données en parallèle, dans le même temps, en faisant de chacun de manière asynchrone. Cependant, il n'existe pas de version asynchrone de la méthode Fill () - c'est à dire BeginFill() serait génial!

Une approche que j'ai essayé est (pseudo):

  1. SqlCommand1.BeginExecuteReader //1ère requête, pour DataTable1
  2. SqlCommand2.BeginExecuteReader //2ème requête, pour DataTable2
  3. SqlCommand1.EndExecuteReader
  4. SqlCommand2.EndExecuteReader
  5. DataTable1.Charge(DataReader1)
  6. DataTable2.Charge(DataReader2)

Cependant, DataTable.Load() prend un temps fou:

Il faut 3 secondes pour faire l'étape 1 à l'étape 4.

L'étape 5, puis s'effectue en 22 secondes.

Étape 6 dure 17 secondes.

Donc, combinée 39 secondes pour les étapes 5 et 6.

Le résultat final est, cela me donne ne sont pas plus juste de faire 2 SqlDataAdapter.Remplit, l'un après l'autre. Je veux le résultat net pour que l'ensemble du processus ne prend que tant que la plus longue de la requête (ou aussi proche que possible).

La recherche de moyens recommandés avant de se retrouver avec quelque chose qui est vraiment une approche asynchrone à remplir un DataTable.

Ou dois-je simplement gérer moi-même et rouleau de 2 threads séparés, chacun remplissant une DataTable?

OriginalL'auteur AdaTheDev | 2010-01-21