Использование ключевого слова lock и новой асинхронной функциональности C # 5.0 - PullRequest
2 голосов
/ 30 сентября 2011

Необходимо ли по-прежнему использовать ключевое слово lock в таких ресурсах, как база данных SQL Compact, в методах, вызываемых с помощью async (AsyncCtpLibrary.dll)? Как я понимаю из выступления Андерса, асинхронная обработка все происходит в одном и том же потоке, поэтому в них не должно быть необходимости, или я ошибаюсь? Я не могу найти информацию об этом нигде в интернете.

Спасибо

1 Ответ

2 голосов
/ 30 сентября 2011

Асинхронность AFAIK основана на TPL и задачах - и поэтому нет, они не будут работать в одном и том же потоке каждый раз (или продолжаться в одном и том же потоке), и да, вы все равно должны проектировать с учетом параллелизма. Async только помогает вам собрать кусочки гораздо приятнее.

Для ясности: все внутри ваших методов (если они запускаются только один раз) будут выполняться в потоке за раз, но если вы будете делиться ресурсами, вам придется думать о блокировке или других методах синхронизации, как вы это делали все время .

Если вы можете использовать неизменяемые данные - таким образом вы можете свести все это к минимуму, но вы все равно должны помнить, что ваши процессы будут выполняться во многих потоках (на ум приходит диспетчеризация для пользовательского интерфейса).

...