ThreadPool.QueueUserWorkItem con una expresión lambda y un método anónimo
Pasar dos parámetros a un nuevo hilo en el conjunto de hilos a veces puede ser complicado, pero parece que con expresiones lambda y métodos anónimos, puedo hacer esto:
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 pasan son inmutables y, por lo tanto, seguros para hilos Las variables s1 y s2 se declaran dentro del alcance del bloque try, que salgo inmediatamente después de poner el trabajo en cola en el grupo de subprocesos, por lo que las variables s1 y s2 nunca se modifican después de eso.¿Hay algo malo con esto
La alternativa es crear una nueva clase que implemente un tipo inmutable con 3 miembros: test, s1 y s2. Eso parece un trabajo extra sin ningún beneficio en este momento.