Có thể dừng trình đọc đang chạy?Tôi có thể ngắt trình đọc dữ liệu trong khi đọc không?
Kịch bản: Tôi có một bảng với 100000 bộ dữ liệu
CREATE TABLE stock (
uid bigint NOT NULL,
name text,
quantity integer,
x bytea,
y bytea
);
và một ứng dụng giao diện điều khiển (.NET 4.0, Npgsql 2.0.11.0/2.0.11.92) cho dữ liệu đọc
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;
}
tôi đã quan sát đầu đọc dữ liệu có thể không thực sự dừng lại. Có vẻ như đầu đọc dữ liệu đọc tất cả các hàng đầu tiên và trả về bình thường sau đó.
Ví dụ này là bản tóm tắt của ứng dụng lớn hơn nơi người dùng sẽ dừng trình đọc dữ liệu bằng cách nhấn nút vì việc đọc mất quá nhiều thời gian.
Tôi đã để lại kết quả đầu ra nhật ký trong trường hợp của mình.Đăng xuất kết quả đầu ra để kiểm tra hành vi của trình đọc dữ liệu trong kịch bản của tôi hiển thị luôn luôn là một thời gian chờ đợi sau khi lệnh "((NpgsqlDataReader) đọc) .Đóng()" của một số giây. Thời gian chờ đợi này là như nhau nếu tôi đọc hết tất cả các hàng. – Joerg
! True && false đánh giá sai. XOR sai đúng sẽ đánh giá đúng. –
đúng, sẽ cập nhật điều này. – oleksii