Beispiel #1
0
        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;
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
        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 =>
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #8
0
        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);
        }