#c# #multithreading #wcf #thread-safety
#c# #многопоточность #wcf #потокобезопасность
Вопрос:
У меня есть пользовательский интерфейс, который иногда взаимодействует с базой данных MSSQL. Существует поток heartbeat, который вставляет / обновляет данные в ту же базу данных в инструкции Invoke.
1) Является ли моя реализация защитой от несоответствия / повреждения данных БД?
2) Является ли Invoke наиболее эффективным / простым способом создания сериализации БД между потоком пользовательского интерфейса / потоком сердцебиения или можно использовать блокировки?
Комментарии:
1. Это зависит от того, как вы хотите, чтобы ваш пользователь взаимодействовал. Нет ничего плохого в вызове обновления базы данных в отдельном потоке. Хотя является ли пользователь тем, кто инициирует это обновление базы данных? Не могли бы вы дать немного больше информации о рабочем процессе пользователя?
Ответ №1:
Вам следует подумать о BackgroundWorker. Это хорошая абстракция вызова метода Invoke, он обрабатывает большинство случаев.
Комментарии:
1. Блокирует ли RunWorkCompleted из BackgroundWorker поток пользовательского интерфейса, чтобы устранить проблемы с параллелизмом? Если это так, я думаю, что это хорошая альтернатива.