Могу ли я прервать считывание данных во время чтения?

Можно ли остановить работающий ридер?

Сценарий: у меня есть таблица со 100000 наборами данных

CREATE TABLE stock (
uid bigint NOT NULL,
name text,
quantity integer,
x bytea,
y bytea
);

и консольное приложение (.NET 4.0, Npgsql 2.0.11.0/2.0. 11.92) для чтения данных

conn = new NpgsqlConnection("Server=localhost;Database=postgres;User id=postgres;password=postgres;Timeout=600;CommandTimeout=600;ConnectionLifeTime=600;");
using (new ConnectionOpen(conn))
using (var ta = conn.BeginTransaction(IsolationLevel.Snapshot))
{
    IDbCommand command = conn.CreateCommand("SELECT * from stock;");
    command.SetTransaction(ta);
    IDataReader reader = command.ExecuteReader();

    int n = 0;
    while (!reader.IsClosed && reader.Read())
    {
        n++;

        if (n > 5000)
        {
            if (reader != null)
            {
                 ((NpgsqlDataReader)reader).Close();
            }
        }
     }
     ((NpgsqlDataReader)reader).Dispose();
     reader = null;
}

Я заметил, что считыватель данных не может останавливаться. Кажется, что считыватель данных сначала читает все строки, а потом нормально возвращается.

Этот пример представляет собой абстракцию более крупного приложения, в котором пользователь останавливает программу чтения данных нажатием кнопки, поскольку чтение занимает слишком много времени.

7
задан Joerg 25 January 2012 в 15:53
поделиться