none
關於異步處理的奇妙的現象 RRS feed

  • 問題

  •  

    各位前輩們大家好,小弟最近在學習關於異步執行的功能時,出現了很奇怪的現像,還請各位前輩指導一下,程式碼如下:

    class Tube

    {

    arraylist tube = new arraylist();

     

    delegate void no_ref_dg(Tube input);

    void merge_tube(Tube input)//相依於merge
    {
                foreach(object o in input.tube)
                {
                    this.tube.Add(o);//出現例外的情況有二:

                 }                           //1.來源陣列不夠長。請檢查 srcIndex 長度,以及陣列的下限。

                                            //2.索引在陣列的界限之外。

    }

     

    public void merge(Tube tube1, Tube tube2)//將二個tube合併成一個tube
            {
                    no_ref_dg dg1 = new no_ref_dg(this.merge_tube);
                    no_ref_dg dg2 = new no_ref_dg(this.merge_tube);

                    IAsyncResult myar = dg1.BeginInvoke(tube1, null, 0);
                    IAsyncResult myar2 = dg2.BeginInvoke(tube2, null, 1);

                    dg1.EndInvoke(myar);
                    dg2.EndInvoke(myar2);

            }

    }

    程式的目的是將二個arraylist 合併到一個arraylist ,而我將這個合併的過程使用異步的方式執行罷了。順帶一提,若是arraylist 的資料量少的話(小於2048),程式可以正確的執行。因此小弟懷疑是arraylist 本身的缺陷 ,還望各位前輩能指點小弟了~ 先說聲謝謝了。
    2008年12月17日 下午 12:31

解答

所有回覆