Я пытаюсь выполнить асинхронные запросы к DB2 под .NET 4.7 в Windows 10 с VS2017, используя последний драйвер DB2 .NET (v11.1, пакет исправлений 3). Я ожидаю некоторого увеличения производительности, но кажется, что асинхронный вариант на самом деле не асинхронный. Я совершенно не прав? Производительность асинхронного и синхронизированного вариантов более или менее идентична. Если я заменю запросы на Task.Delay или другие задачи, асинхронность будет работать лучше.
Я предполагаю, что у меня либо неверные, либо слишком высокие ожидания, что я неправильно использую драйвер DB2 для асинхронного подключения или драйвер DB2 настроен неправильно.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IBM.Data.DB2;
using System.Data;
using System.Reflection;
namespace Db2AsyncTest
{
public class Program
{
static void Main(string[] args)
{
//Warm up
TestSync();
TestAsync().Wait();
TestSync();
Console.ReadKey();
}
static async Task TestAsync()
{
var dt = DateTime.Now;
var tasks = new List<Task>();
for (int i = 0; i < 10; i++)
{
tasks.Add(ExecuteAsync());
}
await Task.WhenAll(tasks);
var dt2 = DateTime.Now;
var timeSpan = dt2 - dt;
Console.WriteLine("Async Time: " + timeSpan.TotalMilliseconds);
}
static async Task ExecuteAsync()
{
using (var conn = new DB2Connection(""))
{
await conn.OpenAsync();
var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM EMPLOYEE";
var reader = await cmd.ExecuteReaderAsync();
var dt = new DataTable();
dt.Load(reader);
}
}
static void TestSync()
{
var dt = DateTime.Now;
for (int i = 0; i < 10; i++)
{
ExecuteSync();
}
var dt2 = DateTime.Now;
var timeSpan = dt2 - dt;
Console.WriteLine("Sync Time: " + timeSpan.TotalMilliseconds);
}
static void ExecuteSync()
{
using (var conn = new DB2Connection(""))
{
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM EMPLOYEE";
var reader = cmd.ExecuteReader();
var dt = new DataTable();
dt.Load(reader);
}
}
}
}