Приложение 2. Пример асинхронной обработки данных
using System;
using System.Data;
using System.Data.LinterClient;
using System.Threading;
namespace Test
{
class Program
{
/* Асинхронная работа */
static void Main(string[] args)
{
/* Создание тестовой таблицы */
CreateDataTable();
/* Создание разных нитей для поиска минимального
* и максимального значений в таблице */
Thread findMinThread = new Thread(FindMin);
Thread findMaxThread = new Thread(FindMax);
/* Старт нитей */
findMinThread.Start();
findMaxThread.Start();
}
static private void FindMin()
{
Console.WriteLine("Поиск минимального значения...");
LinterDbConnection conn = new LinterDbConnection();
conn.ConnectionString = GetConnectionString();
conn.Open();
LinterDbCommand comm = conn.CreateCommand();
comm.Connection = conn;
comm.CommandText = "SELECT MIN(X) FROM T";
object result = comm.ExecuteScalar();
conn.Close();
/* Имитируем длительную работу */
Thread.Sleep(5000);
Console.WriteLine("Минимальное значение: " + result);
}
static private void FindMax()
{
Console.WriteLine("Поиск максимального значения...");
LinterDbConnection conn = new LinterDbConnection();
conn.ConnectionString = GetConnectionString();
conn.Open();
LinterDbCommand comm = conn.CreateCommand();
comm.Connection = conn;
comm.CommandText = "SELECT MAX(X) FROM T";
object result = comm.ExecuteScalar();
conn.Close();
/* Имитируем длительную работу */
Thread.Sleep(7000);
Console.WriteLine("Максимальное значение: " + result);
}
static private void CreateDataTable()
{
Console.Write("Создание тестовой таблицы...");
LinterDbConnection conn = new LinterDbConnection();
conn.ConnectionString = GetConnectionString();
conn.Open();
LinterDbCommand comm = conn.CreateCommand();
comm.Connection = conn;
comm.CommandText = "CREATE OR REPLACE TABLE T(X REAL)";
comm.ExecuteNonQuery();
comm.CommandText = "INSERT INTO T (X) VALUES (RAND())";
for (int i = 0; i <= 10000; i++)
{
comm.ExecuteNonQuery();
}
conn.Close();
Console.WriteLine("завершено.");
}
static private string GetConnectionString()
{
/* Чтобы не хранить строку подключения в коде, вы можете
* получить ее из файла конфигурации */
return "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8";
}
}
}