2009-04-20 157 views
1

幫助我是比較新的異步和麪向服務的編程,並希望做到以下幾點:需要異步操作

  1. 斷火中,可能幾分鐘甚至幾小時運行數據庫的存儲過程。
  2. 將代碼返回給客戶端可用於跟蹤作業進度的作業ID的調用者。

這似乎是一個簡單的任務,但是作爲新的異步編碼,我擔心未知的陷阱。這種類型的功能是否有明確定義的模式?如果是這樣,它是否有名字,什麼是好資源?

回答

0

這個答案在我提出原始問題兩年多後才發佈,但直到最近我才發現我特別尋找的是什麼,當時我遇到了「服務設計模式」一書。

的請求應答模式

http://servicedesignpatterns.com/ClientServiceInteractions/RequestAcknowledge

一個客戶想操作一個文件或文件,啓動一個業務任務或通知系統有關的有趣的事件。請求不需要立即處理。如果需要回復,則在請求處理完成後不需要交付。

當一個服務收到一個請求時,將它轉發給後臺進程,然後返回一個包含唯一請求標識符的確認。

enter image description here

-1

查看observer pattern

維基百科:

觀察者模式(所述 異步的發佈/訂閱 圖案的子集)是一個設計模式 在其中一個對象,稱爲 主體,保持的列表中的 家屬,被稱爲觀察員,和 自動通知他們任何 狀態更改,通常通過調用其方法的一個 。它主要用於實現分佈式事件處理 系統的 系統。

有關觀察者模式的另一個很好的MSDN文章可以找到here

0

當運行異步調用是很好的自定義設置某種回調來處理過程的結果(我不嚴格談論存儲過程,可能是任何異步調用的調用) - 這可能是一個結果集或簡單成功/失敗指標。

如果您考慮周到地使用異步調用來設置某種安全網絡來捕捉結果並以適當的方式做出反應,那麼我不會看到這種方法的任何缺陷(這種方法在很多情況下實際上是非常必要的)。

對於存儲過程的異步調用(這似乎與您的具體情況有關)的實際示例(.NET)看看here

0

如果你想這樣做異步你有2種主要途徑:

註冊與任何資源使用的是它將調用完成時的回調函數。

如果你的資源可是沒有這樣的功能,啓動跟蹤定期的請求完成所有請求和民調線程。每當任務完成時,通過回叫通知擁有者。

0

就你而言,你需要使用回調方法。這將異步執行sql SP執行,並在執行完成時通知您的代碼。另外,您可以使用AsynResult對象來輪詢操作是否已完成。

回撥方式請參考鏈接SqlCommand..::.BeginExecuteReader Method (AsyncCallback, Object)

如果您需要輪詢也一樣,你可以輪詢的IAsyncResult的:

// Make the asynchronous call 
IAsyncResult result = command.BeginExecuteReader(callback, command); 

// Poll to see if complete 
while (!result.IsCompleted) 
{  
// Do more work here if the call isn't complete  
Thread.Sleep(100); 
} 

請參閱我的回答對What is AsyncCallback?所有不同類型的異步技術以簡單的方式解釋。