public void NotificationAfterData()
{
var receivedNotification = false;
using (var conn = OpenConnection())
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "LISTEN notifytest1";
cmd.ExecuteNonQuery();
conn.Notification += (o, e) => receivedNotification = true;
cmd.CommandText = "SELECT generate_series(1,10000)";
using (var reader = cmd.ExecuteReader())
{
//After "notify notifytest1", a notification message will be sent to client,
//And so the notification message will stick with the last response message of "select generate_series(1,10000)" in Npgsql's tcp receiving buffer.
using (var conn2 = new NpgsqlConnection(ConnectionString))
{
conn2.Open();
using (var command = conn2.CreateCommand())
{
command.CommandText = "NOTIFY notifytest1";
command.ExecuteNonQuery();
}
}
// Allow some time for the notification to get delivered
Thread.Sleep(2000);
Assert.IsTrue(reader.Read());
Assert.AreEqual(1, reader.GetValue(0));
}
Assert.That(conn.ExecuteScalar("SELECT 1"), Is.EqualTo(1));
Assert.IsTrue(receivedNotification);
}
}