Я запускаю приведенный ниже код, который запускает несколько функций, и теоретически обе функции и все строки в наборе записей происходят параллельно. Я знаю, что это не буквально, но достаточно близко, что касается SQL Сервер.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я получаю значение из таблицы последовательности, то же значение возвращается для нескольких вызовов , Я подозреваю, что я должен использовать блокировки в запросе, но у меня нет навыков, чтобы определить, какой тип блокировки использовать.
Процесс SQL таков: Получить текущее значение последовательности (й) в табличную переменную, Может быть запрос на более чем одну последовательность. Обновление значения последовательности в виде приращения. Возвращаемая переменная таблицы
Показанный код VB. Net предназначен для описания параллельного вызова. Я не думаю, что в код, который будет полезен для тех, кто смотрит на этот вопрос. Существует множество библиотек, и большинство из них относятся к моделям или вызовам к SQL, они ничем не примечательны и неизменны, поскольку их изменение не входит в сферу действия этого исправления.
Parallel.Invoke(New ParallelOptions With {.MaxDegreeOfParallelism = 30},
Sub()
If logEmailValues.KnownEmailAddresses IsNot Nothing Then
Parallel.ForEach(logEmailValues.KnownEmailAddresses,
Function(ByVal knownEmail) As LogMailLogResponses
Responses.LogResponses.AddRange(New
LogMailExistingCustomer(apiContect)
.AddCommunicationForExistingContact(ret
, repo
, knownEmail
, logEmailValues.EmailDetails
, dataService, traceService).LogResponses)
Return Responses
End Function)
End If
End Sub,
Sub()
If logEmailValues.UnknownEmailAddresses IsNot Nothing Then
Parallel.ForEach(logEmailValues.UnknownEmailAddresses,
Function(ByVal unknownEmail) As LogMailLogResponses
Responses.LogResponses.AddRange(New LogMailNewCustomer().AddCommunicationForNewContact(ret, repo, unknownEmail, logEmailValues.EmailDetails
, dataService, traceService).LogResponses)
Return Responses
End Function)
End If
End Sub)
Return Responses
Если есть предложение о VB.Code Я рад, что C# или VB будет дан, поскольку я работаю в обоих. Но в идеале, предложение о том, как улучшить SQL, было бы лучше всего, оно находится на стадии написания сегодня, так что это что-то вроде пустой проверки