Sto usando Dapper 1.31 da Nuget. Ho questo molto semplice frammento di codice,token di cancellazione su Dapper
string connString = "";
string query = "";
int val = 0;
CancellationTokenSource tokenSource = new CancellationTokenSource();
using (IDbConnection conn = new SqlConnection(connString))
{
conn.Open();
val = (await conn.QueryAsync<int>(query, tokenSource.Token)).FirstOrDefault();
}
Quando premo F12 su QueryAsync
, mi punta a
public static Task<IEnumerable<T>> QueryAsync<T>
(
this IDbConnection cnn,
string sql,
dynamic param = null,
IDbTransaction transaction = null,
int? commandTimeout = null,
CommandType? commandType = null
);
Non c'è CancellationToken
sulla sua firma.
Domande:
- Perché il frammento completamente edificabile assumendo che non v'è alcun errore del compilatore su tutta la soluzione?
- Perdonami perché non riesco a verificare se chiamare
tokenSource.Cancel()
annullerebbe il metodo perché non so come generare query sql a esecuzione prolungata. Lo strumento.Cancel()
annullerà davvero il metodo e generaOperationCancelledException
?
Grazie!
'param' dinamica avrà praticamente nulla. Quello che stai facendo è un po 'come passare un token di cancellazione come parametro a 'Console.WriteLine (string, params object [])'. Solo perché puoi passarlo non significa che la funzione supporti la cancellazione. –