Передача двух параметров в новый поток в threadpool иногда может быть сложной, но, похоже, что с лямбда-выражениями и анонимными методами я могу это сделать:
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
}
Теперь я, конечно, упростил этот пример, но эти точки являются ключевыми:
- Передаваемые объекты строки неизменяемы и, следовательно, потокобезопасны
- Переменные s1 и s2 объявляются в пределах области try, которые я выхожу сразу же после очередности работы в пул потоков, поэтому переменные s1 и s2 никогда не изменяются после этого.
С этим что-то не так?
Альтернативой является создание нового класса, который реализует неизменяемый тип с тремя членами: test, s1 и s2. Это просто похоже на дополнительную работу без каких-либо преимуществ на данный момент.