Ниже приведен базовый пример того, как вы можете достичь желаемого поведения.Нет отменяющего запроса к базе данных, но игнорируются результаты, которые больше не актуальны.
public static IEnumerable<Row> GetRowsForTheFirstButton()
{
var token = GridResultsSync.GetCurrentToken();
// retrieving data
...
if (GridResultsSync.IsTokenRelevant(token))
return result;
return null;
}
// exactly the same code for the second method
public static IEnumerable<Row> GetRowsForTheSecondButton()
{
var token = GridResultsSync.GetCurrentToken();
// retrieving data
...
if (GridResultsSync.IsTokenRelevant(token))
return result;
return null;
}
...
class GridResultsSync
{
static int _count = 0;
public static int GetCurrentToken()
{
return Interlocked.Increment(ref _count);
}
public static bool IsTokenRelevant(int token)
{
var currentCount = Interlocked.Increment(ref _count);
return currentCount - token <= 2;
}
}
Когда вы звоните GetRowsForTheFirstButton()
и GetRowsForTheSecondButton()
, тогда вы проверяете, не является ли результат null
, затемвы привязываете результат к сетке, если результат равен нулю, то ничего не делаете.
Если вы действительно хотите отменить запрос к БД, вы можете рассмотреть более сложный подход.Это можно сделать с помощью SqlCommand.Cancel Method или, если вы используете Entity Framework
, вы можете использовать CancellationToken .