我正在研究一個類庫,它根據Web配置文件中定義的策略在多種數據源(文件,xml,數據庫)中記錄Web應用程序的審計詳細信息。異步方法調用的排序
我的審覈日誌方法有一個類似於此的簽名: public static void LogInfo(User user,Module module,List lst);
Web應用程序使用此方法記錄重要的細節,如警告,錯誤甚至異常詳細信息。
由於在單個工作流程中,有超過700多次對這些方法的調用,所以我認爲它們是異步的。我從線程池用簡單的方法類稱爲QueueUserWorkItem
ThreadPool.QueueUserWorkItem(o => LogInfo(User user, Module module, List<Object> lst));
但是這並不能保證在工作項排隊到它的順序。儘管我的所有信息都被記錄下來,但整個訂單都搞亂了。在我的文本文件中,我的日誌沒有按照它們被調用的順序。
有沒有一種方法可以控制使用QueueUserWorkItem調用的線程的順序?
**編輯**我最初建議使用'BlockingCollection',但在這種情況下使用'ConcurrentQueue'就夠了。(其實,我在看到Brizio的答案之前甚至意識到這一點:-)) – 2011-05-04 21:58:25
我將從頁面的生命週期事件多次調用審計方法。實際上,它也可以從單個方法多次調用。 Can ConcurrentQueue是否照顧這個? –
2011-05-04 22:04:28
@Kunal:是的,您可以添加多個動作(通過重複調用「添加」)。 – 2011-05-04 22:06:31