From eaf03938606b8ab8b0d444569d10325acae281ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=BC=9F?= Date: Sat, 30 Nov 2019 10:12:04 +0800 Subject: [PATCH] Add ValueTask support (#89) * Add ValueTask support * remove netstandard2.1 --- src/Ben.Demystifier/Ben.Demystifier.csproj | 10 ++++++---- src/Ben.Demystifier/EnhancedStackTrace.Frames.cs | 10 +++++++++- test/Ben.Demystifier.Test/MixedStack.cs | 7 +++---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Ben.Demystifier/Ben.Demystifier.csproj b/src/Ben.Demystifier/Ben.Demystifier.csproj index 6ba71f1..de26b84 100644 --- a/src/Ben.Demystifier/Ben.Demystifier.csproj +++ b/src/Ben.Demystifier/Ben.Demystifier.csproj @@ -1,4 +1,4 @@ - + Ben Core @@ -15,16 +15,18 @@ netstandard2.0;net45 + true key.snk - - + + - 1.5.0 + 1.6.0 + diff --git a/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs b/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs index 45cbe1d..9b4539c 100644 --- a/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs +++ b/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs @@ -51,7 +51,7 @@ namespace System.Diagnostics { var frame = stackFrames[i]; var method = frame.GetMethod(); - + // Always show last stackFrame if (!ShowInStackTrace(method) && i < stackFrames.Length - 1) { @@ -647,6 +647,10 @@ namespace System.Diagnostics { return false; } + if (type == typeof(ValueTask<>) && method.Name == "get_Result") + { + return false; + } if (type == typeof(Task)) { switch (method.Name) @@ -687,6 +691,10 @@ namespace System.Diagnostics } else if (type == typeof(TaskAwaiter) || type == typeof(TaskAwaiter<>) || + type == typeof(ValueTaskAwaiter) || + type == typeof(ValueTaskAwaiter<>) || + type == typeof(ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter) || + type == typeof(ConfiguredValueTaskAwaitable<>.ConfiguredValueTaskAwaiter) || type == typeof(ConfiguredTaskAwaitable.ConfiguredTaskAwaiter) || type == typeof(ConfiguredTaskAwaitable<>.ConfiguredTaskAwaiter)) { diff --git a/test/Ben.Demystifier.Test/MixedStack.cs b/test/Ben.Demystifier.Test/MixedStack.cs index 0fde176..3ec67d1 100644 --- a/test/Ben.Demystifier.Test/MixedStack.cs +++ b/test/Ben.Demystifier.Test/MixedStack.cs @@ -39,13 +39,12 @@ namespace Ben.Demystifier.Test } } - Exception GetMixedStackException() { Exception exception = null; try { - Start((val:"", true)); + Start((val: "", true)); } catch (Exception ex) { @@ -61,7 +60,7 @@ namespace Ben.Demystifier.Test "string string.Join(string separator, IEnumerable values)", "string Ben.Demystifier.Test.MixedStack+GenericClass.GenericMethod(ref V value)", "async Task Ben.Demystifier.Test.MixedStack.MethodAsync(int value)", - "async Task Ben.Demystifier.Test.MixedStack.MethodAsync(TValue value)", + "async ValueTask Ben.Demystifier.Test.MixedStack.MethodAsync(TValue value)", "(string val, bool) Ben.Demystifier.Test.MixedStack.Method(string value)", "ref string Ben.Demystifier.Test.MixedStack.RefMethod(string value)", "(string val, bool) Ben.Demystifier.Test.MixedStack.s_func(string s, bool b)", @@ -91,7 +90,7 @@ namespace Ben.Demystifier.Test } [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - static async Task MethodAsync(TValue value) => await MethodAsync(1); + static async ValueTask MethodAsync(TValue value) => await MethodAsync(1); [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] static (string val, bool) Method(string value) => (MethodAsync(value).GetAwaiter().GetResult(), true);