static async Task ReadAuthorsWithCancellationAsync(TimeSpan timeout)
{
string connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Library;Integrated Security=True;";
string sql = "SELECT Id, FirstName, LastName FROM Authors";
using (var cts = new CancellationTokenSource(timeout))
{
try
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
await conn.OpenAsync(cts.Token);
using (SqlCommand cmd = new SqlCommand(sql, conn))
using (SqlDataReader reader = await cmd.ExecuteReaderAsync(cts.Token))
{
while (await reader.ReadAsync(cts.Token))
{
int id = reader.GetInt32(0);
string firstName = reader.GetString(1);
string lastName = reader.GetString(2);
Console.WriteLine($"{id}.