Возможно, это вопрос, который задавался много раз, но после долгих поисков и прочтения я все еще не совсем уверен, каков наилучший подход.
Проблема проста: некоторые транзакции базы данных в моем приложении длинные (секунды, минуты). Это может быть результатом двух вещей: один запрос запрашивается для обработки большого количества данных или несколько запросов выполняются для серии извлеченных данных. Во многих случаях обе вещи находятся в игре. Это приводит к зависанию пользовательского интерфейса и, что еще хуже, он не может отменить это.
Решение также кажется простым: переместите эти транзакции в другой поток, а затем уничтожьте этот поток, если это необходимо.
Однако многие люди здесь, в Интернете, выступают против убийства тем. Они предлагают использовать DbCommand.Cancel (), который является потокобезопасной операцией. Но другие люди говорят, что нет никакой гарантии, что эта команда отменит запрос. Представлена еще большая проблема: как поток пользовательского интерфейса может узнать, какой DbCommand выполняет, когда пользователь нажимает? Черт, поток мог обрабатывать данные в памяти в этот момент.
Можете ли вы пролить свет на эту тему?