pasar dos parámetros para un nuevo hilo en el conjunto de subprocesos a veces puede ser complicado, pero parece que con las expresiones lambda y métodos anónimos, que puedo hacer esto:ThreadPool.QueueUserWorkItem con una expresión lambda y método anónimo
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
}
Ahora, ciertamente he simplificado este ejemplo, pero estos puntos son clave:
- Los objetos de cadena que se transmiten son inmutables y por lo tanto para las hebras
- El S1 y S2 se declaran las variables w dentro del alcance del bloque try, que salgo inmediatamente después de poner en cola el trabajo para el grupo de subprocesos, por lo que las variables s1 y s2 nunca se modifican después de eso.
¿Hay algún problema con esto?
La alternativa es crear una nueva clase que implemente un tipo inmutable con 3 miembros: prueba, s1 y s2. Eso parece un trabajo extra sin ningún beneficio en este punto.
¿Por qué no escribes 'o => test.DoWork (s1, s2)' en lugar de la definición más detallada? –
@Mehrdad: Porque soy muy nuevo en las expresiones lambda. ;) - ¡Gracias! –
@Mehrdad: Lo cambié en la pregunta. –