silverlight非同步陷阱(二)迴圈

來源:互聯網
上載者:User

由於非同步完成事件不能確定,順序也不能確定,如果把非同步作業放到迴圈內,可能會產生意想不到的結果。

下面的程式本意是:迴圈items集合,為每個item賦值。

              foreach (BookRankItem item in items)
              {

//item只有部分屬性有值

                  //Debug.WriteLine(item.Index);//輸出0,1,2,3
                  EventHandler bookPageHander = (s, e) =>
                  {

                    //為item載入資料

                     BookPage bookPage = service.BookPage;

                      item.LoadFromPage(bookPage);
                      PagedItems.Add(item);
                       Debug.WriteLine(item.Index);//根據網路情況可能是3,3,3,3.只有最後一個
                      };
                   service.Loaded -= bookPageHander;
                  service.Loaded += bookPageHander;
                  service.Load(item.Uri);

 

由於賦值操作在非同步內執行,執行完的順序時間都是隨機的,PagedItems內容可能是任意的Item。

如果外層迴圈到最後一個,非同步才開始,會導致PagedItems載入的都是最後一項。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.