Chúng ta có đoạn mã sau đây (ý tưởng cho mã này được tìm thấy trên trang web này) sẽ sinh ra các luồng mới cho phương thức "Do_SomeWork()". Điều này cho phép chúng tôi chạy phương thức nhiều lần không đồng bộ.C# Execute Method (with Parameters) với ThreadPool
Mã này là:
var numThreads = 20;
var toProcess = numThreads;
var resetEvent = new ManualResetEvent(false);
for (var i = 0; i < numThreads; i++)
{
new Thread(delegate()
{
Do_SomeWork(Parameter1, Parameter2, Parameter3);
if (Interlocked.Decrement(ref toProcess) == 0) resetEvent.Set();
}).Start();
}
resetEvent.WaitOne();
Tuy nhiên chúng tôi muốn tận dụng ThreadPool hơn là tạo chủ đề mới của chúng ta mà có thể gây phương hại đến hiệu suất. Câu hỏi là làm thế nào chúng ta có thể sửa đổi mã trên để sử dụng ThreadPool lưu ý rằng phương thức "Do_SomeWork" lấy nhiều tham số và cũng có kiểu trả về (tức là phương thức không bị vô hiệu).
Ngoài ra, đây là C# 2.0.
Chỉ cần suy nghĩ nếu nó thực sự tuyệt vời để chạy các phương thức của bạn trên gọi lại trong khi truyền các đối tượng null/taskInfo – electricalbah