2009-06-03 50 views
1

我有一個C#庫,通過網頁UI浮出水面。當然還有UI層,通過業務邏輯層進行調用,然後訪問數據訪問層來檢索數據。數據實際上是通過一個能夠異步查詢數據的Web服務來檢索的。異步架構

我開始學習如何異步處理請求,以加快頁面時間(儘可能多地從Web服務中抓取多個項目),以及線程沒有被束縛的可伸縮性時間。

鑑於我的代碼的三層體系結構,這是否意味着頁面異步通過業務層進行調用(並因此通過併發請求加速),並且數據層中的Web服務又會使它的請求是異步的?雜耍所有回調的邏輯正在傷害我的大腦。這種類型的方法是否有任何資源?

回答

3

如果您可以站出來介紹一種新語言,F#在編寫異步代碼方面非常出色,它的主要優點之一就是恕我直言,除了簡潔之外。編寫異步代碼看起來幾乎完全像線性非異步代碼!

相關鏈接:

如果你不想引入一種新的語言,這裏是一種技術爲你唱迭代器來簡化代碼:

1

我猜你有兩個方面來處理來自回調:

  • 數據層 - >業務對象
  • 業務對象 - >表示層

對於第一層一,我會使用代碼生成爲所有方法自動創建aysnc和回調邏輯。如果你有很多非常接近的類,那麼這個工作就很好。

對於第二個區域,我傾向於使用數據綁定來自動更新UI,因爲下面的對象正在填充。

3

有一個有點有用的概念叫Future<T>,它代表將來要完成的異步工作的一個單元。

所以,簡單地說,在某些操作(如應用程序啓動或頁面加載)開始時,您可以定義將來需要哪些值,並讓後臺線程爲您計算它們。

當你的用戶要求一個特定的值時,你可以從Future<T>那裏索要。如果它已經完成,你立即得到它,否則你將不得不阻止你的主線程,或者以某種方式通知用戶該值還沒有準備好。

關於這個概念的一些討論你可以找到here

+0

夢幻般的答案! – 2009-06-03 14:42:05