Asyn c не имеет ничего общего с параллелизмом. Фактически, если что-нибудь, это добавляет к проблемам параллелизма, так как нет никакого определенного порядка для операций с asyn c, следовательно, "асинхронный". Однако в многопоточной среде, такой как веб-приложение, параллелизм является проблемой, syn c или asyn c, поскольку каждый из 1000 или более потоков может выполнять одну и ту же работу одновременно.
Есть только два реальных способа обработки параллелизма: блокировки и токены параллелизма. Жетоны параллелизма являются лучшим методом, но они работают только для существующих вещей (не вставок). По сути, у вас есть столбец, в котором хранится токен параллелизма, и каждый раз, когда в этой строке выполняется операция, токен обновляется. Затем, прежде чем вы на самом деле выполните операцию, вы проверяете, что токен такой же, как когда вы получили строку в первую очередь (то есть ничего не изменилось). Если это так, то вы можете продолжить операцию. Если нет, то что-то еще изменило его, и, таким образом, уже не безопасно go впереди. Эта проверка выполняется с помощью предложения where. Например:
update Foos set Bar = 'Baz' where Id = 1 and Version = {token}
Если токен в Version
больше не совпадает, то, очевидно, ни одна строка не будет соответствовать и ничего не будет обновлено. Затем вы можете использовать возвращенное число операций (т. Е. Ноль), чтобы определить, что произошел сбой параллелизма, и восстановить.
Это не будет работать со вставкой, потому что нечего отключать, чтобы определить, или не произошло изменение. (Вы не можете использовать предложение where во вставке.) В этой ситуации у вас нет другого выбора, кроме как использовать блокировки, чтобы предотвратить что-либо еще во время выполнения операции. Однако блокировки абсолютно убьют вашу пропускную способность, так как по существу вынуждают последующие запросы стоять в очереди, и они могут обрабатываться только по одному за раз. Таким образом, вы должны избегать этих типов операций полностью, когда параллелизм является проблемой. (Вставки, которые не конфликтуют друг с другом, подойдут.)