Xin chào, tôi có _noOfThreads
là các tác vụ được xác định để chạy cùng một lúc. Vì vậy, tôi tiếp tục Công việc bằng cách sử dụng toán tử %
và vào cuối vòng lặp, tôi có Tasks.WaitAll
. Đây là đoạn mã.Task.WaitAll không chờ nhiệm vụ con?
for (int index = 0; index < count; index++)
{
if (index < _noOfThreads)
tasks[index] = Task.Factory.StartNew(somedelegate);
else
tasks[index % _noOfThreads].ContinueWith(task => { foo.bar(); },
TaskContinuationOptions.AttachedToParent);
}
Task.WaitAll(tasks);
Tuy nhiên, tôi nhận thấy nó không chờ đợi nhiệm vụ của trẻ hoàn thành. Ngay sau khi hoàn thành nhiệm vụ phụ huynh, dòng tiếp theo sau Task.WaitAll
được thực hiện. Làm cách nào để thay đổi mã này để chờ nhiệm vụ con?
có thể trùng lặp của [Task.ContinueWith không hoạt động như thế nào tôi mong đợi] (http://stackoverflow.com/questions/6997480/task-continuewith-not-working-how-i-expected) – mellamokb
Trên ghi chú bên, những gì bạn xuất hiện để làm ở đây là quyết định lập kế hoạch nhiệm vụ. Nếu bạn muốn tùy chỉnh lịch biểu, bạn có thể xem xét xuất phát từ [TaskScheduler] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.aspx). Điều đó nói rằng, các Scheduler mặc định đã làm một công việc khá tốt của không quá tải hệ thống với các chủ đề khi một số lượng lớn các nhiệm vụ được xếp hàng đợi. –
@Dan: Đó không phải là mối quan tâm của tôi. Tôi không biết muốn đưa điều này cho TaskScheduler. Tôi có một biến và tôi muốn bắt đầu công việc nhiều như biến đó chỉ. Trong ngắn hạn, tôi muốn mô phỏng một cái gì đó như Semaphore, nơi bạn xác định số lượng các chủ đề và chỉ có số lượng các chủ đề có thể nhập vào đoạn mã đó tại một thời điểm nhất định. –