比方說,我有一種方法,每隔10ms不斷接收輸入,將數據添加到Queue<T>
,另一個線程出列並執行一些處理,並寫入文件以保持一切流暢。原因是因爲處理將花費超過10毫秒。使用async/await和Task進行時間關鍵處理有什麼區別?
在使用.Net 4更新此方法時,我將使用長時間運行選項啓動一個新任務,以確保創建新線程。有一個BlockingCollection<T>
將數據添加到任務方法中並使用BlockingCollection
調用GetConsumingEnumerable
來處理數據並將其寫入文件。
首先,我不完全確定是否需要任務來創建新線程,但由於我的無知,這似乎是最有效的方法。其次引進的async
和await
關鍵字
我可能再次改寫這個,這樣當數據到來時,調用標有async
這確實處理,然後調用await FileStream.WriteAsync
的方法。這將確保相隔10ms進入的數據是否可以正常處理,並且沒有後臺日志?我發現這些新關鍵字不會創建新線程,而只是以某種方式及時處理執行。
在我的情況下,這對我有什麼好處,還是應該堅持使用長時間運行的Task和BlockingCollection創建新線程?
你的問題還不清楚 - FileStream進來了嗎?請澄清您的總體情況,以及您是否能*實際*在輸入到達時儘快處理輸入。 – 2012-03-01 13:16:55
@JonSkeet FileStream正好表明我正在使用可用的新異步函數寫入文件。處理在另一個線程/任務上完成的原因是處理時間超過10ms。已更新問題以顯示此內容。 – Jon 2012-03-01 13:19:34