public static async Task <int> MainAsync() { Console.WriteLine("App thread {0}", Thread.CurrentThread.ManagedThreadId); CancellationTokenSource cts = new CancellationTokenSource(); FilterStringList oddFilter = new FilterStringList(OddFilter); FilterStringList evenFilter = new FilterStringList(EvenFilter); FilterStringList[] filters = { oddFilter, evenFilter }; EventSimulator.Start(); StartSensors(); Task <List <string> > collectData = StartCollectionInterval(cts); await Task.Delay(2000); cts.Cancel(); //propogate cancellation among async operations -- which causes return of that task await collectData; //now I do the actual awaiting List <string> collectionOfData = collectData.Result; // if ( collectionOfData.IsCompleted ) { // Console.WriteLine("THIS IS THE RESULT" + string.Join(",", collectionOfData.Result) ); // } string[] allResults = collectionOfData.ToArray(); JObject[] jsonObjs = allResults.Select(s => JObject.Parse(s)).ToArray(); foreach (JObject o in jsonObjs) { // Console.WriteLine(o.ToString());s // JToken data = o.GetValue("data"); JArray eventArray = (JArray)o["data"]; //Are these auto optimized? or do i needs a transducer List <JObject> importantEvents = eventArray .Where(ev => ev.ToString().Length > 0) //make sure the jtoken was not a newline .Select(ev => JObject.Parse(ev.ToString())) //JToken -> Jobject .Where(Filter.IsImportantEvent) //Filter out "non-important" events .ToList(); if (importantEvents.Count > 0) { Console.WriteLine(JsonConvert.SerializeObject(importantEvents)); } // bool test = Filter.IsImportantEvent(ev); // Console.WriteLine(ev + " " + test); Console.WriteLine("------------------------"); } // Console.WriteLine( string.Join(",",allResults) + "\n\n" + jsonObjs[1].ToString()); return(0); }
public static void Demo() { Add add4 = AddFour; Add add3 = AddThree; Add sub4 = SubtractFour; Console.WriteLine("should be 8 : " + add4(4)); Console.WriteLine("should be 6 : " + add3(3)); Console.WriteLine("Should be 7 : " + AddAdd(add4, add3, 0)); //subtract has the same signature so I can use it as well Console.WriteLine("Should be 0 : " + AddAdd(add4, sub4, 0)); List <string> myStringList = new List <string>() { "test", "strings", "are", "interesting?" }; FilterStringList oddFilterFn = new FilterStringList(OddFilter); FilterStringList evenFilterFn = new FilterStringList(EvenFilter); FilterStringList oddFilterFn_func = new FilterStringList(OddFilter_func); FilterStringList[] filterArray = { oddFilterFn, evenFilterFn, oddFilterFn_func }; // Predicate<string> isEvenLength = s => s.Length % 2 == 0; Func <string, bool> isEvenLength = s => s.Length % 2 == 0; string[] areEven = myStringList.Where(isEvenLength).ToArray(); Console.WriteLine(" areEven : " + string.Join(",", areEven)); }