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("sprzedaz@name.pl");

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

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

                var msgToClient = GetMsgToClient(smtpServer.UserName, "test@name.pl", 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, "test@name.pl", link);

Sa thread safe ?

0

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

var smtpServer = await new GetSmtpServerByNameService().Execute("sprzedaz@name.pl");

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

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

                var msgToClient = GetMsgToClient(smtpServer.UserName, "test@name.pl", 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