lock
на самом деле очень полезная концепция, но только при разумном ее использовании.
Если в дальнейшем коде вы не хотите обновлять ссылку на snapshot
(коллекция, которую вы получаете отBluetoothCapture.Instance.Snapshot()
), но просто выполните запрос Linq
, чтобы получить отфильтрованное значение для выполнения некоторой логики. вы можете избежать использования lock
.
Это также будет полезно, так как не выполняя lock
, вы фактически не удерживаете другие потоки для выполнения его логики.- и мы не должны игнорировать тот факт, что ужасное использование lock
может вызвать серьезные проблемы, такие как dead-lock
.
вы получаете это исключение, наиболее вероятно, коллекцию, в которой вы выполняете linq
запрос;обновляется другим потоком.(у меня тоже возникла эта проблема).
вы можете сделать одну вещь, вместо того, чтобы использовать общую ссылку на коллекцию (ту, которую вы получаете от BluetoothCapture.Instance.Snapshot()
), вы можете создать локальный список - так как он локальныйон не будет обновляться другими потоками.