Improve async iterator exception stack traces (#21103)
authorStephen Toub <stoub@microsoft.com>
Tue, 20 Nov 2018 10:08:00 +0000 (05:08 -0500)
committerGitHub <noreply@github.com>
Tue, 20 Nov 2018 10:08:00 +0000 (05:08 -0500)
commitaa4197400ed4ea1d4ffb421e55712a01b40673fa
tree3455160b4e3ae4a41b04507f2305cf456a4c0353
parent417fea5c5b358a79c6d096a887a89c12ec3ece2e
Improve async iterator exception stack traces (#21103)

- The current stack trace prettying logic assumes that a method only has one StateMachineAttribute, but that's no longer true with async iterators, which (at least with the current implementation) can have both an AsyncStateMachineAttribute and an IteratorStateMachineAttribute.  As such, we change the prettying logic to look through all StateMachineAttributes rather than stopping at the first one.
- ManualResetValueTaskSourceCore.GetResult is responsible for propagating exceptions, but it's infrastructure and isn't particularly meaningful in a call stack.   Hide it from the stack trace, as we do for other such GetResult methods in Task and ValueTask.
src/System.Private.CoreLib/shared/System/Threading/Tasks/Sources/ManualResetValueTaskSourceCore.cs
src/System.Private.CoreLib/src/System/Diagnostics/Stacktrace.cs