Это больше из личного любопытства / интереса, чем из-за конкретной проблемы, которую я пытаюсь решить.
Предположим, у вас есть программа, которая выполняет некоторую операцию над предоставленной пользователем информацией (например, строкой поиска), которая изменяется по мере того, как пользователь ее вводит. Предположим, что вы хотите показать пользователю наиболее релевантную информацию для того, что он набрал в любой момент времени.
Если бы потоки действительно прерывались, мы могли бы просто запустить один поток на основе последней измененной строки поиска и отменить все предыдущие потоки, которые были в процессе.
Теперь общепринятая лучшая практика для этого сегодня заключается в использовании таймера задержки в качестве пользовательских типов, который ждет от 0,5 до 1 секунды, прежде чем начать операцию. Я надеюсь, что достаточно очевидно, что это не идеальное решение, теоретически (любой вид искусственной задержки создает искусственное узкое место, которое никогда не может быть преодолено, даже если оно составляет всего 0,5 секунды).
Кроме того, в соответствии с лучшими на сегодня практиками утверждается, что любые последующие операции должны ожидать завершения предыдущей операции перед выполнением. В мире, где мы не можем прервать операции, это имеет смысл, но, теоретически, это далеко от идеала. Представьте, что пользователь вводит один символ и делает паузу достаточно долго, чтобы начать операцию. Предположим, что для выполнения этой операции требуется 10 секунд. Теперь пользователь вынужден ждать недопустимое количество времени, прежде чем результаты его запроса станут видны.
(Необязательный) обходной путь - это одновременное выполнение нескольких операций, предполагая, что это безопасно, но это все равно приведет к значительному снижению производительности.
Так что мне просто интересно узнать мнение людей по этому поводу, по крайней мере, специфическое для .NET, и есть ли какие-либо новые разработки в этой области с тех пор, как я в последний раз исследовал это, о которых мне следует знать (возможно, параллельные библиотеки?) Мне также было бы любопытно узнать, могут ли какие-либо другие языки / фреймворки справляться с таким детальным управлением операциями лучше, чем .NET.
Приветствие.