Przechodząc dwa parametry do nowego wątku na puli wątków może być czasami skomplikowane, ale wydaje się, że z wyrażeń lambda i anonimowe metody, mogę to zrobić:ThreadPool.QueueUserWorkItem z wyrażenia lambda i metody anonimowej
public class TestClass
{
public void DoWork(string s1, string s2)
{
Console.WriteLine(s1);
Console.WriteLine(s2);
}
}
try
{
TestClass test = new TestClass();
string s1 = "Hello";
string s2 = "World";
ThreadPool.QueueUserWorkItem(
o => test.DoWork(s1, s2)
);
}
catch (Exception ex)
{
//exception logic
}
teraz już na pewno uprościć ten przykład, ale te punkty są kluczowe:
- Przedmiotem smyczkowe były przekazywane są niezmienne i dlatego threadsafe
- S1 i S2 są zmienne zadeklarowane w w zakresie bloku try, który zamykam natychmiast po kolejkowaniu pracy do puli wątków, więc zmienne s1 i s2 nigdy nie są modyfikowane po tym.
Czy coś jest nie tak z tym?
Alternatywą jest utworzenie nowej klasy, która implementuje niezmienny typ z trzema elementami: test, s1 i s2. To wydaje się być dodatkową pracą bez żadnych korzyści w tym momencie.
Dlaczego po prostu nie napiszesz "o => test.DoWork (s1, s2)" zamiast bardziej szczegółowej definicji? –
@Mehrdad: Ponieważ jestem naprawdę nowy w wyrażeniach lambda. ;) - dzięki! –
@Mebron: Zmieniłem go w pytaniu. –