Ejemplo n.º 1
0
        public async void Issue206()
        {
            var sync   = new object();
            var tasks  = new List <Task>();
            var output = new List <string>();

            Console.WriteLine("OptionAsync");
            OptionAsync <int> optAsync = Some(4).ToAsync();
            var tskOptionAsync         = optAsync.IfSome(async(i) =>
            {
                await Task.Delay(100);
                var x = DoWork();

                lock (sync)
                {
                    tasks.Add(x);
                    output.Add($"Inner id {x.Id}");
                }

                await x;
            });

            lock (sync)
            {
                output.Add($"Outer id {tskOptionAsync.Id}");
                tasks.Add(tskOptionAsync);
            }
            await tskOptionAsync;

            Assert.Equal(TaskStatus.RanToCompletion, tasks[0].Status);
            Assert.Equal(TaskStatus.RanToCompletion, tasks[1].Status);
        }