Przekształcenie pętli foreach w Parallel.ForEach

Odpowiedz Nowy wątek
2018-11-30 09:20
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);
            };

Pozostało 580 znaków

2018-11-30 11:42
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 ?

edytowany 3x, ostatnio: error91, 2018-11-30 11:44

Pozostało 580 znaków

2018-11-30 11:59
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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