2010-06-13 42 views
1

我必須創建一個將每天啓動幾次的應用程序(它是非交互式的)。Workflow Foundation:異步操作(冗長的網絡I/O)

要運行,它需要來自Internet的大量數據(兆字節),而且通過相當慢的連接,所以WCF服務調用需要相當長的一段時間。

同時,它需要執行本地計算並具有複雜的初始化過程。

所以,我想要做的是創建一個工作流,異步提取數據(需要幾分鐘),而已經初始化/本地計算。

有沒有辦法做到這一點?

回答

1

您可以對每個異步操作使用BackgroundWorker組件 - 一個用於計算,一個用於數據下載。

我的建議是每個操作使用一個線程。在你開始每個線程之後,每個線程都要調用thread.Join()來等待每個線程完成。

例如

Thread[] workers = new Thread[2]; 
workers[0] = new Thread(dataDownloader.Fetch); 
workers[1] = new Thread(calculator.DoComplexCalculations); 

foreach(Thread t in workers) 
{ 
    t.Start(); 
} 
foreach(Thread t in workers) 
{ 
    t.Join(); 
} 
1

您可以生成wcf服務的異步類(使用commandlinetool)。如果您運行這些異步方法,它們立即返回並在完成後調用回調委託。通過這種方式,您可以自由地在等待時進行所有計算