ApmPatternWithMultipleMethods 需額外定義 ApmData 封裝共享資料、無法使用 using(資源跨方法開關)、需手動 Close()。
ApmPatternWithAnonymousMethod 將回調內嵌,程式碼集中、無需 ApmData。編譯器自動產生封裝類別,將外部方法參數/區域變數提升為欄位,實現跨方法/執行緒共享資料。仍無法用 using(形式上仍有兩個方法)。
ApmPatternWithLambdaExpression:result => { ... } 取代 delegate(IAsyncResult result) { ... },編譯器自動推斷參數型別,語法更簡潔。
Primary ThreadId=1
ThreadId=1: 4D-5A-90-00-03 (SynchronousPattern)
ThreadId=3: 4D-5A-90-00-03 (ApmPatternWithMultipleMethods)
ThreadId=3: 4D-5A-90-00-03 (ApmPatternWithAnonymousMethod)
ThreadId=3: 4D-5A-90-00-03 (ApmPatternWithLambdaExpression)
ThreadId=3: 4D-5A-90-00-03 (ApmPatternWithIterator)
同步模式在主執行緒;所有非同步模式皆在執行緒池執行緒 (ThreadId=3) 完成,驗證非同步不阻塞主執行緒。