Я использую Dapper 1.31 от Nuget. У меня есть этот очень простой фрагмент кода,
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();
}
Когда я нажимаю F12 на QueryAsync
, он указывает мне на
public static Task<IEnumerable<T>> QueryAsync<T>
(
this IDbConnection cnn,
string sql,
dynamic param = null,
IDbTransaction transaction = null,
int? commandTimeout = null,
CommandType? commandType = null
);
В его подписи нет CancellationToken
.
Вопросы:
- Почему фрагмент полностью готов к сборке, предполагая, что во всем решении нет ошибки компилятора?
- Простите меня, что я не могу проверить, действительно ли вызов
tokenSource.Cancel()
отменит метод, потому что я не знаю, как сгенерировать длительный SQL-запрос. Действительно ли.Cancel()
отменит метод и выброситOperationCancelledException
?
Благодарю вас!
dynamic param
возьмет практически все. То, что вы делаете, похоже на передачу токена отмены в качестве параметраConsole.WriteLine(string, params object[])
. Тот факт, что вы можете передать это, не означает, что функция поддерживает отмену. - person ta.speot.is   schedule 28.08.2014