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); }