Я пытаюсь использовать библиотеку параллельных задач NET 4.0 для обработки нескольких запросов FTS. Если запрос занимает слишком много времени, я хочу отменить его и продолжить обработку остальных.
Этот код не останавливается, когда один запрос превышает порог. Я думаю, что я называю это так, чтобы задача отмены и ограничение по времени были достигнуты для всего процесса, а не отдельной транзакции. Если я установлю период времени очень малым (300 мс), он будет вызван для всех строк поиска.
Я думаю, что упускаю что-то очевидное .. заранее спасибо за понимание.
Кроме того, это, похоже, еще не останавливает выполнение очень длинного запроса. Это даже правильный способ отменить длительный запрос после его запуска?
Модифицированный код:
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
var query = searchString.Values.Select(c =>myLongQuery(c)).AsParallel().AsOrdered()
.Skip(counter * numToProcess).Take(numToProcess).WithCancellation(cts.Token);
new Thread(() =>
{
Thread.Sleep(5000);
cts.Cancel();
}).Start();
try
{
List<List<Threads>> results = query.ToList();
foreach (List<Threads> threads in results)
{
// does something with data
}
} catch (OperationCanceledException) {
Console.WriteLine("query took too long");
}