2013-01-21 36 views
0

我想通過C#5中引入的這些新關鍵字來體驗一下。我有興趣研究如何以併發方式分發工作。我會更自然地使用線程池來做這件事,但有興趣在這個新的異步模式中做同樣的事情。使用異步/等待模式下載多個文檔

所以這裏是我的玩具的例子,我正在寫一個爬行器,它將從n個根站點爬取並進一步跟蹤鏈接。有沒有什麼好的併發模式來編寫這個應用程序。

+0

有大約正是這種例子在互聯網上的許多文章,你有沒有試過看他們? – svick

+0

你會發現一個。我還沒有真正找到這方面的一個。有一點需要注意,它不是關於線程池或異步/等待同時使用兩者。 – Dave

+0

@Dave:線程池在這裏有什麼好處?你是如何使用它的? –

回答

1

無論使用何種線程技術,您都需要一名經理將工作負載分發給各個工作人員。經理將創建1-N個工作進程。在工作進程中,他們將執行您選擇的目標線程化方法。

我建議您創建一個接口,每個這些工作人員都需要遵守,並在接口中指定一個啓動方法,該方法需要url,可能的錯誤情況是公開的,可以檢查,停止該過程,並在假定沒有錯誤的情況下完成工作時傳遞數據。最後是一個狀態,比如枚舉,關於它當前是正在工作還是停止或者有錯誤停止。

然後,管理員可以簡單地創建每個進程,方法是交出目標URL並將工作單元放入其自己的內部隊列中。經理然後通過隊列查找標記自己已完成的項目,然後將數據交給GUI(?)以顯示給最終用戶。

那麼這個新的異步等待模式如何適合它呢?您只需在工作者類中使用異步等待進行調用,並根據需要處理數據。經理不需要知道,因爲類通過接口方法與經理進行通信。

這裏有一些文件,讓你開始在異步伺機模式:

The Task-Based Async Await Pattern(下載Word)由斯蒂芬Toub

Asynchronous Programming with Async and Await (C# and Visual Basic)