public void ReferenceType() { var sensorRequest = new SensorRequest { Id = "iddqd" }; var getData = new Func <SensorRequest, Task <SensorDto> >(async request => { await Task.Delay(1000); return(await SensorData.GetSensorAsync(request.Id)); }); var sensorTask = getData(sensorRequest); sensorRequest.Id = "idkfa"; var result = sensorTask.Result; }
public async Task Linq_Select_Lazy() { // 07_Linq has and example of LINQ Select. This example shows more complicated case with API requests // Find first sensor with data value under 23 var sensorIds = new[] { "iddqd", "idkfa", "abba5", "acdc1" }; // Have to use own extension method as Where/First etc. do not support async var item = await sensorIds.Select(async id => { var data = await SensorData.GetSensorAsync(id); Trace.WriteLine(JsonConvert.SerializeObject(data)); return(data); }) .FirstOrDefaultAsync(async s => (await s).Data < 23); Trace.WriteLine($"First item: {JsonConvert.SerializeObject(item)}"); }
public void RunTask() { void BackgroundExecution() { while (true) { var data = SensorData.GetSensorSync(); Thread.Sleep(1000); Trace.WriteLine($"In the background: {data.Data}"); } } var task = Task.Run(() => BackgroundExecution()); while (task.IsCompleted == false) { Thread.Sleep(1000); } }
public void SensorId() { var selectedSensor = "iddqd"; var getData = new Func <Task <SensorDto> >(async() => { await Task.Delay(1000); return(await SensorData.GetSensorAsync(selectedSensor)); }); var sensorTask = getData(); selectedSensor = "idkfa"; var result = sensorTask.Result; // Fix // var getData = new Func<string Task<SensorDto>>(async sensorId => }
public async Task Tasks_FromAsync() { var ids = new string[] { "iddqd", "idkfq", "abba5", "acdc1" }; var tasks = new List <Task <double> >(); foreach (var id in ids) { var dataTask = SensorData.GetDataAsync(id); tasks.Add(dataTask); } var results = await Task.WhenAll(tasks); var tasksLinq = ids.Select(e => SensorData.GetSensorAsync(e)).ToList(); var results2 = await Task.WhenAll(tasksLinq); // Select is lazy, but now tasksLinq is a List var high = tasksLinq.Where(e => e.Result.Data > 10).ToList(); }
public async Task Tasks_FromSync() { var ids = new string[] { "iddqd", "idkfq", "abba5", "acdc1" }; var tasks = new List <Task <SensorDto> >(); foreach (var id in ids) { var task = Task.Run(() => { var value = SensorData.GetSensorSync(id); return(value); }); // var task = Task.Run(() => SensorData.GetSensorSync(id)); tasks.Add(task); } var results = await Task.WhenAll(tasks); }
public void RunThread() { void BackgroundExecution() { while (true) { // Do something important var data = SensorData.GetSensorSync(); Thread.Sleep(1000); Trace.WriteLine($"In the background: {data.Data}"); } } var t = new Thread(new ThreadStart(BackgroundExecution)); t.Start(); while (t.IsAlive) { Thread.Sleep(1000); } }
public async Task AsyncAwait_Comparison() { // Warmup SensorData.GetDataSync("iddqd"); await SensorData.GetDataAsync("iddqd"); var sw = Stopwatch.StartNew(); var syncResult1 = SensorData.GetDataSync("iddqd"); var syncResult2 = SensorData.GetDataSync("idkfa"); var syncResult3 = SensorData.GetDataSync("abba5"); var syncResult4 = SensorData.GetDataSync("acdc1"); var syncTime = sw.ElapsedMilliseconds; sw = Stopwatch.StartNew(); var r1 = await SensorData.GetDataAsync("iddqd"); var r2 = await SensorData.GetDataAsync("idkfa"); var r3 = await SensorData.GetDataAsync("abba5"); var r4 = await SensorData.GetDataAsync("acdc1"); var asyncTime = sw.ElapsedMilliseconds; sw = Stopwatch.StartNew(); var t1 = SensorData.GetDataAsync("iddqd"); var t2 = SensorData.GetDataAsync("idkfa"); var t3 = SensorData.GetDataAsync("abba5"); var t4 = SensorData.GetDataAsync("acdc1"); var results = await Task.WhenAll(t1, t2, t3, t4); var awaitTime = sw.ElapsedMilliseconds; }
public void RunTaskReturn() { // Often tasks return something rather than just run "forever" on the background double BackgroundExecution() { var data = SensorData.GetSensorSync(); Thread.Sleep(1000); return(data.Data); } var task = Task.Run(() => BackgroundExecution()); while (task.IsCompleted == false) { Thread.Sleep(1000); } var result = task.Result; Assert.Equal(2, result); }