Implementing TPL Dataflow on iOS / Android with Xamarin
Code here is borrowed from TPL examples in the Microsoft TPL Dataflow documentation, and adapted for Mono/Xamarin and iOS/Android.
The major concession I've had to make is to implement the TransformBlock that uses Parallel.ForEach in the iOS platform-specific code since it's not available in a PCL for Mono. (Android implementation to follow).
In addition, you may need to track down and manually install / reference the System.Diagnostics.Tracing DLL that's internally referenced by TPL Dataflow. Unfortunately this DLL isn't part of the standard set installed by Xamarin.
Here's a sample output run (cleaned up a bit) from the iOS simulator on my Mac:
Thread started: #2Thread started: #3Thread started: <Thread Pool> #4Thread started: <Thread Pool> #5Thread started: <Thread Pool> #62015-05-15 16:27:40.426 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:40.2583300Z][DBUG00007][DataflowQueue.ReversedWordFinder.DoDownloadAsync L68]: Downloading http://www.gutenberg.org/files/6130/6130-0.txtThread started: <Thread Pool> #7Thread started: <Thread Pool> #8Thread started: <Thread Pool> #92015-05-15 16:27:46.459 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:46.2343900Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoDownloadAsync L68]: Downloading http://www.gutenberg.org/cache/epub/1727/pg1727.txt2015-05-15 16:27:46.459 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:46.2365490Z][DBUG00007][DataflowQueue.ReversedWordFinder.DoCreateWordList L87]: Creating word list...2015-05-15 16:27:46.459 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:46.3346280Z][DBUG00007][DataflowQueue.ReversedWordFinder.DoFilterWordList L110]: Filtering word list...2015-05-15 16:27:49.098 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:49.0473340Z][DBUG00011][DataflowQueue.ReversedWordFinder.DoDownloadAsync L68]: Downloading http://www.gutenberg.org/cache/epub/1635/pg1635.txt2015-05-15 16:27:49.099 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:49.0473400Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoCreateWordList L87]: Creating word list...2015-05-15 16:27:50.370 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:50.3699470Z][DBUG00011][DataflowQueue.ReversedWordFinder.DoCreateWordList L87]: Creating word list...2015-05-15 16:27:51.954 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:51.9539550Z][DBUG00007][DataflowQueue.ReversedWordFinder.DoFilterWordList L118]: Found 14493 words2015-05-15 16:27:51.954 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:51.9539820Z][DBUG00007][DataflowQueue.ReversedWordFinder.DoFilterWordList L110]: Filtering word list...2015-05-15 16:27:51.955 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:51.9556120Z][DBUG00008][DataflowQueue.iOS.AppDelegate.FinishedLaunching L42]: Checking for reversible words...Thread started: <Thread Pool> #102015-05-15 16:27:52.289 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2888780Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word aera / area2015-05-15 16:27:52.289 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2888870Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word dog / god2015-05-15 16:27:52.289 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2888890Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word doom / mood2015-05-15 16:27:52.289 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2888920Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word draw / ward2015-05-15 16:27:52.290 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2888940Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word led / del2015-05-15 16:27:52.290 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2888970Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word area / aera2015-05-15 16:27:52.290 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889000Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word mid / dim2015-05-15 16:27:52.290 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889020Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word mood / doom2015-05-15 16:27:52.290 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889040Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word moor / room2015-05-15 16:27:52.290 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889060Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word evil / live2015-05-15 16:27:52.291 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889080Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word net / ten2015-05-15 16:27:52.291 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889110Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word not / ton2015-05-15 16:27:52.291 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889130Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word now / won2015-05-15 16:27:52.291 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889150Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word god / dog2015-05-15 16:27:52.291 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889170Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word port / trop2015-05-15 16:27:52.291 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889200Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word deeps / speed2015-05-15 16:27:52.292 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889220Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word deer / reed2015-05-15 16:27:52.292 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889240Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word del / led2015-05-15 16:27:52.292 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889260Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word reed / deer2015-05-15 16:27:52.292 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889290Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word dew / wed2015-05-15 16:27:52.292 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889310Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word dim / mid2015-05-15 16:27:52.292 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2889330Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word room / moor2015-05-15 16:27:52.293 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892770Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word keels / sleek2015-05-15 16:27:52.293 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892780Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word saw / was2015-05-15 16:27:52.293 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892810Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word seat / taes2015-05-15 16:27:52.293 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892820Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word sleek / keels2015-05-15 16:27:52.293 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892830Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word speed / deeps2015-05-15 16:27:52.293 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892840Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word spot / tops2015-05-15 16:27:52.294 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892860Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word spots / stops2015-05-15 16:27:52.294 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892870Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word stops / spots2015-05-15 16:27:52.294 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892880Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word taes / seat2015-05-15 16:27:52.294 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892900Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word ten / net2015-05-15 16:27:52.294 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892910Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word tis / sit2015-05-15 16:27:52.295 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892960Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word ton / not2015-05-15 16:27:52.295 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892970Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word tops / spot2015-05-15 16:27:52.295 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2892980Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word trop / port2015-05-15 16:27:52.295 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2893000Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word ward / draw2015-05-15 16:27:52.295 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2893010Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word was / saw2015-05-15 16:27:52.295 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2893030Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word wed / dew2015-05-15 16:27:52.296 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2893040Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word won / now2015-05-15 16:27:52.296 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:52.2893050Z][DBUG00012][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word wolf / flow2015-05-15 16:27:55.362 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:55.3628810Z][DBUG00007][DataflowQueue.ReversedWordFinder.DoFilterWordList L118]: Found 8084 words2015-05-15 16:27:55.363 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:55.3629040Z][DBUG00007][DataflowQueue.ReversedWordFinder.DoFilterWordList L110]: Filtering word list...2015-05-15 16:27:55.363 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:55.3629580Z][DBUG00012][DataflowQueue.iOS.AppDelegate.FinishedLaunching L42]: Checking for reversible words...2015-05-15 16:27:55.510 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5107930Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word draw / ward2015-05-15 16:27:55.511 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5107990Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word live / evil2015-05-15 16:27:55.511 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108000Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word lived / devil2015-05-15 16:27:55.511 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108020Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word edit / tide2015-05-15 16:27:55.511 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108040Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word mad / dam2015-05-15 16:27:55.511 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108060Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word evil / live2015-05-15 16:27:55.512 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108090Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word mid / dim2015-05-15 16:27:55.512 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108110Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word net / ten2015-05-15 16:27:55.512 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108130Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word nod / don2015-05-15 16:27:55.512 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108160Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word now / won2015-05-15 16:27:55.512 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108180Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word god / dog2015-05-15 16:27:55.512 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108210Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word part / trap2015-05-15 16:27:55.513 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108240Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word parts / strap2015-05-15 16:27:55.513 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108280Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word gut / tug2015-05-15 16:27:55.513 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108300Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word pot / top2015-05-15 16:27:55.513 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108330Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word dam / mad2015-05-15 16:27:55.513 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108350Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word del / led2015-05-15 16:27:55.513 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108380Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word deliver / reviled2015-05-15 16:27:55.513 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108410Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word devil / lived2015-05-15 16:27:55.514 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108430Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word raw / war2015-05-15 16:27:55.514 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108460Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word dim / mid2015-05-15 16:27:55.514 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108480Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word dog / god2015-05-15 16:27:55.514 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108510Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word don / nod2015-05-15 16:27:55.514 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108530Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word led / del2015-05-15 16:27:55.514 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108560Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word reviled / deliver2015-05-15 16:27:55.515 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108580Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word saw / was2015-05-15 16:27:55.515 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108610Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word spot / tops2015-05-15 16:27:55.515 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108630Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word strap / parts2015-05-15 16:27:55.515 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108660Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word ten / net2015-05-15 16:27:55.515 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108680Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word tide / edit2015-05-15 16:27:55.515 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108710Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word tops / spot2015-05-15 16:27:55.516 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108740Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word top / pot2015-05-15 16:27:55.516 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108770Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word trap / part2015-05-15 16:27:55.516 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108790Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word tug / gut2015-05-15 16:27:55.516 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108810Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word war / raw2015-05-15 16:27:55.516 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108840Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word ward / draw2015-05-15 16:27:55.516 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108860Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word was / saw2015-05-15 16:27:55.516 DataflowQueue.iOS[65527:914231] [2015-05-15T06:27:55.5108890Z][DBUG00008][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word won / now2015-05-15 16:27:55.631 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:55.6318960Z][DBUG00007][DataflowQueue.ReversedWordFinder.DoFilterWordList L118]: Found 1821 words2015-05-15 16:27:55.632 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:55.6319610Z][DBUG00011][DataflowQueue.iOS.AppDelegate.FinishedLaunching L42]: Checking for reversible words...2015-05-15 16:27:55.652 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:55.6525070Z][DBUG00011][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word live / evil2015-05-15 16:27:55.652 DataflowQueue.iOS[65527:914198] [2015-05-15T06:27:55.6525120Z][DBUG00011][DataflowQueue.ReversedWordFinder.DoPrint L156]: Found reversed word evil / live