WaitHandle.WaitAll無法處理長度超過64的陣列

當有一些大量計算可以multi-thread同時做的時候我喜歡用ThreadPool.QueueUserWorkItem丟下去跑。無論是用ThreadPool或多個Thread,有時需要等待那些計算全部完成才能繼續做後續動作,這時就可以用一個ManualResetEvent的collection搭配WaitHandle.WaitAll。然而WaitHandle.WaitAll在陣列元素超過64個的時候就會發生NotSupportedException
還好WaitHandle.WaitAll做的事情其實很簡單,我們可以自己寫一個function來做。以下是一位C# MVP William Stacey提供的一段WaitAll程式碼
        public static void WaitAll(WaitHandle[] handles)
        {
            if (handles == null)
                throw new ArgumentNullException(“handles");
            foreach (WaitHandle wh in handles)
            {
                wh.WaitOne();
            }
        }

廣告
本篇發表於 Microsoft Visual Studio。將永久鏈結加入書籤。

One Response to WaitHandle.WaitAll無法處理長度超過64的陣列

  1. 浩洋 說道:

    奇怪的限制?

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s