Przekształcenie pętli foreach w Parallel.ForEach

0

Dzień dobry,

mam poniższy kod, który dla listy orders realizuje sekwencyjnie wysyłkę wiadomości. Każda pętla korzysta ze zmiennej smtpServer, bez modyfikowania jej.

Jest sens zmieniać kod na Parallel.ForEach? Nie wiem za bardzo jak sprawić, żeby korzystanie ze zmiennej smtpServer przez każdy wątek było prawidłowe.

            var smtpServer = await new GetSmtpServerByNameService().Execute("[email protected]");

            foreach (var order in orders)
            {
                var encryptedOrderId = new EncyptOrderIdService().Execute(order.OrderId);

                var link = $"/link/order?orderId={encryptedOrderId}";

                var msgToClient = GetMsgToClient(smtpServer.UserName, "[email protected]", link);
            };
0

Za mało kodu pokazałeś. Co to jest smtpServer ? SmtpClient ? GDzie tutaj wywolujesz w ogóle metode .Send() ?
Czy te dwie linie

var encryptedOrderId = new EncyptOrderIdService().Execute(order.OrderId);
var msgToClient = GetMsgToClient(smtpServer.UserName, "[email protected]", link);

Sa thread safe ?

0

Przepraszam, nie zauważyłem, ze mi jedna linijka uciekła, całość:

var smtpServer = await new GetSmtpServerByNameService().Execute("[email protected]");

            foreach (var order in orders)
            {
                var encryptedOrderId = new EncyptOrderIdService().Execute(order.OrderId);

                var link = $"/link/order?orderId={encryptedOrderId}";

                var msgToClient = GetMsgToClient(smtpServer.UserName, "[email protected]", link);

                new SendMailService().Execute(smtpServer, msgToClient);
            };

smtpServer udostępnia informacje np. o nr portu, nazwa hosta itp. na potrzeby wysyłki wiadomości nic więcej.

GetMsgToClient jeżeli użyję ParallelForEach to nie będzie thread safe, bo właśnie będzie korzystała z lokalnej zmiennej smtpServer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1