Example #1
0
 public IEnumerable <Task <SensorDto> > OpenStream(IEnumerable <string> ids)
 {
     while (true)
     {
         foreach (var id in ids)
         {
             yield return(SensorData.GetSensorAsync(id));
         }
     }
 }
Example #2
0
        public async Task Tasks_FromAsync_Linq()
        {
            var ids = new string[] { "iddqd", "idkfq", "abba5", "acdc1" };

            var tasksLinq = ids.Select(e => SensorData.GetSensorAsync(e)).ToList();

            var results = await Task.WhenAll(tasksLinq);

            // Select is lazy, but now tasksLinq is a List
            // Try what happes without .ToList() and with it
            var over10Sensors = tasksLinq.Where(e => e.Result.Data > 10).ToList();
        }
Example #3
0
        public async Task Lazy_Class()
        {
            var sensor = new Lazy <Task <SensorDto> >(async() =>
            {
                Trace.WriteLine("Fetching data");
                return(await SensorData.GetSensorAsync("abba5"));
            });

            Assert.False(sensor.IsValueCreated);

            var data = await sensor.Value;

            var dataOther = await sensor.Value;
        }
Example #4
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;
        }
Example #5
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)}");
        }
Example #6
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 =>
        }
Example #7
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();
        }