From cc58bb0e73595551d1af71fd139b1783265c04cf Mon Sep 17 00:00:00 2001
From: vsadov <8218165+VSadov@users.noreply.github.com>
Date: Fri, 17 Oct 2025 17:43:23 -0700
Subject: [PATCH 1/3] Enable async feature/tests
---
src/coreclr/inc/clrconfigvalues.h | 2 +-
src/tests/async/Directory.Build.targets | 5 -----
2 files changed, 1 insertion(+), 6 deletions(-)
diff --git a/src/coreclr/inc/clrconfigvalues.h b/src/coreclr/inc/clrconfigvalues.h
index 3a1b3dc5fbe19c..754b462be0e7d2 100644
--- a/src/coreclr/inc/clrconfigvalues.h
+++ b/src/coreclr/inc/clrconfigvalues.h
@@ -714,7 +714,7 @@ RETAIL_CONFIG_DWORD_INFO(EXTERNAL_EnableRiscV64Zbb, W("EnableRiscV64
#endif
// Runtime-async
-RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_RuntimeAsync, W("RuntimeAsync"), 0, "Enables runtime async method support")
+RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_RuntimeAsync, W("RuntimeAsync"), 1, "Enables runtime async method support")
///
/// Uncategorized
diff --git a/src/tests/async/Directory.Build.targets b/src/tests/async/Directory.Build.targets
index 5a4d413a9e1f62..61a1b2822ed114 100644
--- a/src/tests/async/Directory.Build.targets
+++ b/src/tests/async/Directory.Build.targets
@@ -4,10 +4,5 @@
true
-
-
- true
-
-
From fe10fa838bf4dca1fc635852bbf750f44c77e006 Mon Sep 17 00:00:00 2001
From: vsadov <8218165+VSadov@users.noreply.github.com>
Date: Fri, 7 Nov 2025 14:39:28 -0800
Subject: [PATCH 2/3] Do not hold to the last used Continuation in the runtime
async tasks.
---
.../CompilerServices/AsyncHelpers.CoreCLR.cs | 22 +++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs
index 19ea178f6bf1f9..d7eead54192d55 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs
@@ -238,7 +238,7 @@ private static void TransparentAwait(object o)
private interface IRuntimeAsyncTaskOps
{
static abstract Action GetContinuationAction(T task);
- static abstract Continuation GetContinuationState(T task);
+ static abstract Continuation MoveContinuationState(T task);
static abstract void SetContinuationState(T task, Continuation value);
static abstract bool SetCompleted(T task);
static abstract void PostToSyncContext(T task, SynchronizationContext syncCtx);
@@ -297,9 +297,16 @@ void ITaskCompletionAction.Invoke(Task completingTask)
private struct Ops : IRuntimeAsyncTaskOps>
{
public static Action GetContinuationAction(RuntimeAsyncTask task) => (Action)task.m_action!;
- public static Continuation GetContinuationState(RuntimeAsyncTask task) => (Continuation)task.m_stateObject!;
+ public static Continuation MoveContinuationState(RuntimeAsyncTask task)
+ {
+ Continuation continuation = (Continuation)task.m_stateObject!;
+ task.m_stateObject = null;
+ return continuation;
+ }
+
public static void SetContinuationState(RuntimeAsyncTask task, Continuation value)
{
+ Debug.Assert(task.m_stateObject == null);
task.m_stateObject = value;
}
@@ -373,9 +380,16 @@ void ITaskCompletionAction.Invoke(Task completingTask)
private struct Ops : IRuntimeAsyncTaskOps
{
public static Action GetContinuationAction(RuntimeAsyncTask task) => (Action)task.m_action!;
- public static Continuation GetContinuationState(RuntimeAsyncTask task) => (Continuation)task.m_stateObject!;
+ public static Continuation MoveContinuationState(RuntimeAsyncTask task)
+ {
+ Continuation continuation = (Continuation)task.m_stateObject!;
+ task.m_stateObject = null;
+ return continuation;
+ }
+
public static void SetContinuationState(RuntimeAsyncTask task, Continuation value)
{
+ Debug.Assert(task.m_stateObject == null);
task.m_stateObject = value;
}
@@ -429,7 +443,7 @@ public static unsafe void DispatchContinuations(T task) where T : Task,
DispatcherInfo dispatcherInfo;
dispatcherInfo.Next = t_dispatcherInfo;
- dispatcherInfo.NextContinuation = TOps.GetContinuationState(task);
+ dispatcherInfo.NextContinuation = TOps.MoveContinuationState(task);
t_dispatcherInfo = &dispatcherInfo;
while (true)
From f2bfa918100571a3d9ef420499bb5b7e6205820f Mon Sep 17 00:00:00 2001
From: vsadov <8218165+VSadov@users.noreply.github.com>
Date: Sat, 8 Nov 2025 11:49:05 -0800
Subject: [PATCH 3/3] Revert "Enable async feature/tests"
This reverts commit cc58bb0e73595551d1af71fd139b1783265c04cf.
---
src/coreclr/inc/clrconfigvalues.h | 2 +-
src/tests/async/Directory.Build.targets | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/coreclr/inc/clrconfigvalues.h b/src/coreclr/inc/clrconfigvalues.h
index 754b462be0e7d2..3a1b3dc5fbe19c 100644
--- a/src/coreclr/inc/clrconfigvalues.h
+++ b/src/coreclr/inc/clrconfigvalues.h
@@ -714,7 +714,7 @@ RETAIL_CONFIG_DWORD_INFO(EXTERNAL_EnableRiscV64Zbb, W("EnableRiscV64
#endif
// Runtime-async
-RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_RuntimeAsync, W("RuntimeAsync"), 1, "Enables runtime async method support")
+RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_RuntimeAsync, W("RuntimeAsync"), 0, "Enables runtime async method support")
///
/// Uncategorized
diff --git a/src/tests/async/Directory.Build.targets b/src/tests/async/Directory.Build.targets
index 61a1b2822ed114..5a4d413a9e1f62 100644
--- a/src/tests/async/Directory.Build.targets
+++ b/src/tests/async/Directory.Build.targets
@@ -4,5 +4,10 @@
true
+
+
+ true
+
+