fix(core-tests): 修复 PauseStackManagerTests 锁分析器警告

- 修复 PauseStackManagerTests 并发测试中的锁声明,针对 net9 以上使用专用 Lock。

- 保持 net8.0 回退到 object 锁,确保多目标兼容且测试行为不变。
This commit is contained in:
gewuyou 2026-04-27 08:09:26 +08:00
parent 946cdbb9d2
commit 650618b5ab
2 changed files with 30 additions and 16 deletions

View File

@ -47,9 +47,11 @@ public sealed class AsyncKeyLockManagerTests
var index = i; var index = i;
tasks.Add(Task.Run(async () => tasks.Add(Task.Run(async () =>
{ {
await using var handle = await manager.AcquireLockAsync("same-key").ConfigureAwait(false); await using ((await manager.AcquireLockAsync("same-key").ConfigureAwait(false)).ConfigureAwait(false))
{
executionOrder.Add(index); executionOrder.Add(index);
await Task.Delay(10).ConfigureAwait(false); await Task.Delay(10).ConfigureAwait(false);
}
})); }));
} }
@ -75,11 +77,13 @@ public sealed class AsyncKeyLockManagerTests
var key = $"key-{i}"; var key = $"key-{i}";
tasks.Add(Task.Run(async () => tasks.Add(Task.Run(async () =>
{ {
await using var handle = await manager.AcquireLockAsync(key).ConfigureAwait(false); await using ((await manager.AcquireLockAsync(key).ConfigureAwait(false)).ConfigureAwait(false))
{
var current = Interlocked.Increment(ref concurrentCount); var current = Interlocked.Increment(ref concurrentCount);
maxConcurrent = Math.Max(maxConcurrent, current); maxConcurrent = Math.Max(maxConcurrent, current);
await Task.Delay(50).ConfigureAwait(false); await Task.Delay(50).ConfigureAwait(false);
Interlocked.Decrement(ref concurrentCount); Interlocked.Decrement(ref concurrentCount);
}
})); }));
} }
@ -117,8 +121,10 @@ public sealed class AsyncKeyLockManagerTests
var key = $"key-{i % 10}"; var key = $"key-{i % 10}";
tasks.Add(Task.Run(async () => tasks.Add(Task.Run(async () =>
{ {
await using var handle = await manager.AcquireLockAsync(key).ConfigureAwait(false); await using ((await manager.AcquireLockAsync(key).ConfigureAwait(false)).ConfigureAwait(false))
{
await Task.Delay(1).ConfigureAwait(false); await Task.Delay(1).ConfigureAwait(false);
}
})); }));
} }
@ -139,10 +145,12 @@ public sealed class AsyncKeyLockManagerTests
{ {
tasks.Add(Task.Run(async () => tasks.Add(Task.Run(async () =>
{ {
await using var handle = await manager.AcquireLockAsync("same-key").ConfigureAwait(false); await using ((await manager.AcquireLockAsync("same-key").ConfigureAwait(false)).ConfigureAwait(false))
{
var temp = counter; var temp = counter;
await Task.Delay(1).ConfigureAwait(false); await Task.Delay(1).ConfigureAwait(false);
counter = temp + 1; counter = temp + 1;
}
})); }));
} }
@ -295,9 +303,11 @@ public sealed class AsyncKeyLockManagerTests
{ {
for (var j = 0; j < 10; j++) for (var j = 0; j < 10; j++)
{ {
await using var handle = await manager.AcquireLockAsync($"key-{j % 5}").ConfigureAwait(false); await using ((await manager.AcquireLockAsync($"key-{j % 5}").ConfigureAwait(false)).ConfigureAwait(false))
{
await Task.Delay(10).ConfigureAwait(false); await Task.Delay(10).ConfigureAwait(false);
} }
}
})); }));
} }

View File

@ -431,7 +431,11 @@ public class PauseStackManagerTests
{ {
var tasks = new List<Task>(); var tasks = new List<Task>();
var tokens = new List<PauseToken>(); var tokens = new List<PauseToken>();
#if NET9_0_OR_GREATER
var lockObj = new System.Threading.Lock();
#else
var lockObj = new object(); var lockObj = new object();
#endif
for (int i = 0; i < 100; i++) for (int i = 0; i < 100; i++)
{ {