yield inside of try / catch
Summary
This expands the use of yield so it is permitted:
- Inside the
try portion of a try / catch block
- Inside the
catch portion of a try / catch with some restrictions on the presence of finally
Motivation
This is a long standing pain point in iterators that customers bring up with some regularity. The restriction exists largely because of limitations in the native compiler state machine rewriting code at the point iterators were implemented. The Roslyn compiler is capable of performing this type of rewrite, mostly through the innovations around async method state machines. Given that we should remove this restriction to make iterators more flexible.
Detailed design
Full details are in the proposal document.
#8413
Design meetings
yield inside of try / catch
Summary
This expands the use of
yieldso it is permitted:tryportion of atry / catchblockcatchportion of atry / catchwith some restrictions on the presence offinallyMotivation
This is a long standing pain point in iterators that customers bring up with some regularity. The restriction exists largely because of limitations in the native compiler state machine rewriting code at the point iterators were implemented. The Roslyn compiler is capable of performing this type of rewrite, mostly through the innovations around
asyncmethod state machines. Given that we should remove this restriction to make iterators more flexible.Detailed design
Full details are in the proposal document.
#8413
Design meetings