Wait until all threads finished their work in ThreadPool

后端 未结 5 463
不知归路
不知归路 2020-12-09 10:28

i have this code:

var list = new List();
for(int i=0;i<10;i++) list.Add(i); 
for(int i=0;i<10;i++)
{
     ThreadPool.QueueUserWorkItem(
             


        
5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-09 10:52

    I am not sure if ThreadPool exposes such functionality but you can use wait handles and by the way iterating twice seems unnecessary:

    var events = new ManualResetEvent[10];
    var list = new List();
    for (int i = 0; i < 10; i++)
    {
        list.Add(i);
        events[i] = new ManualResetEvent(false);
        int j = i;
        ThreadPool.QueueUserWorkItem(x => {
            Console.WriteLine(x);
            events[j].Set();
        }, list[i]);
    }
    WaitHandle.WaitAll(events);
    

提交回复
热议问题