2015-08-18 41 views
3

嗯,我知道我的問題需要更多的技術指導,但我希望SO成員不會介意TPL Dataflow的新手提出一些非常基礎的問題。TPL數據流將被執行的網站報廢

我有一個簡單的Windows窗體應用程序,它負責從我的系統上的Excel文件中提取數據並將它們保存在數據庫中。這個過程太長了,我想把它變成異步和並行。以下是我的場景簡介。

呼叫功能在一開始打開連接到數據庫

調用函數來更新數據庫操作

應用程序需要處理想這是在增量100個Excel文件的時間訂購。爲此,我使用了隨每次調用都遞增的FileNumber。

呼叫函數轉到updateUI(的PageNumber被傳遞)(實施例。文件1個處理)

呼叫功能來讀取Excel文件(的PageNumber被傳遞)

呼叫函數來處理Excel文件數據(Excel數據是通過和的PageNumber傳遞)

呼叫功能在數據庫中保存的值(Excel數據傳遞和的PageNumber傳遞)

呼叫功能轉到updateUI(的PageNumber傳遞)(例文件1處理)

現在我已經實現了,我能夠讓使用任務這個過程異步。我使用異步並等待所有長時間運行的操作,並將我的功能轉換爲任務。

現在我想讓一些任務並行運行。並非每個任務都是並行的,例如OpenDatabase連接將只是異步。但是我想創建一個單獨的任務或函數,它將在我的應用程序中從更新UI到ReadingExcel文件中的每個任務/函數使用數據流塊,並將它們保存到數據庫中。

我開始使用ActionBlock來嘗試這個,但有很多不同的塊,我什麼也不知道。請引導我在這種情況下將使用哪個塊。如果有人爲這種情況提供僞代碼,那麼它將非常棒。我會從一開始。

回答

1

在學習了關於TPL Dataflow之後,我設法對它和它的塊有了基本的瞭解。如果有其他人需要一個開始,我提到我的理解。

TPL Dataflow建立在TPL(任務並行庫)上,其主要目的是實現生產者/接收者(actor/agent)設計。

TPL Dataflow由也稱爲數據流塊的塊組成。這些數據流塊的目的是緩衝,處理和傳播數據。每個塊可以是接收者或生產者,可以是兩者。

每個塊都實現IDataflowBlock,而不管其用途(接收者,生產者)。該接口的目的是將一個類作爲數據流塊。第二個目的是通過成功完成或通過故障使任何塊關閉,最後該接口使塊返回代表塊異步完成的System.Threading.Task。

此外,根據其用途使用不同的其他接口,即接收器,製造商或傳播者。 Reciver塊實現ISourceBlock,Producer塊實現ITargetBlock和propagator IPropagatorBlock。

塊也可從這些建於塊歸類到其他類別,如,

>> Execution Blocks 
    >> ActionBlock 
    >> TransformBlock 
    >> TransformManyBlock 

>> Buffering Blocks 
    >> BufferBlocl 
    >> BrodcastBlock 
    >> WriteOnceBlock 

>> Joining Blocks 
    >> BatchBlock 
    >> JoinBlock 
    >> BatchedJoinBlock 

除此之外,定製模塊也可以寫,但在大多數情況下,這些塊供應的目的。此外,我還可以包括每個塊的目的,但它會成爲一篇文章。這是我的基本理解,我仍在學習和探索TPL數據流。

如果有人想了解TPL Dataflow專門針對Data Scrapper,那麼這裏是示例數據流框圖,以幫助更好地理解流程。

Web Crawler Demonstration in TPL Dataflow

來源:https://petermeinl.wordpress.com/2012/10/13/a-webcrawler-demonstrating-the-beauty-of-tpl-dataflow/