Передача двух параметров в новый поток в пуле потоков иногда может быть сложной, но похоже, что с лямбда-выражениями и анонимными методами я могу сделать это:
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. Это просто кажется дополнительной работой без какой-либо пользы на данный момент.
o => test.DoWork(s1, s2)
вместо более подробного определения? - person mmx   schedule 10.04.2009