Đi qua hai tham số to a thread mới trên threadpool đôi khi có thể phức tạp, nhưng có vẻ như với các biểu thức lambda và các phương pháp vô danh, tôi có thể làm điều này:ThreadPool.QueueUserWorkItem với một biểu thức lambda và phương pháp vô danh
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
}
Bây giờ, tôi đã chắc chắn đơn giản hóa ví dụ này, nhưng những điểm này là chìa khóa:
- Các đối tượng chuỗi được thông qua là không thay đổi và do đó threadsafe
- Các s1 và s2 biến được khai báo w ithin phạm vi của khối thử, mà tôi thoát ngay lập tức sau khi xếp hàng công việc vào nhóm luồng, do đó các biến s1 và s2 không bao giờ được sửa đổi sau đó.
Có vấn đề gì với điều này không?
Cách khác là tạo lớp mới thực hiện loại không thay đổi với 3 thành viên: test, s1 và s2. Điều đó có vẻ giống như công việc phụ không có lợi ích tại thời điểm này.
Tại sao bạn không viết 'o => test.DoWork (s1, s2)' thay vì định nghĩa dài dòng hơn? –
@Mehrdad: Bởi vì tôi thực sự mới với các biểu thức lambda. ;) - cảm ơn! –
@Mehrdad: Tôi đã thay đổi nó trong câu hỏi. –