Browse Source

address copilot review: wait for stale channel release before disposal; add barrier timeouts in tests

pull/25311/head
maliming 4 months ago
parent
commit
e4ccf01d23
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 1
      framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ChannelPool.cs
  2. 8
      framework/test/Volo.Abp.RabbitMQ.Tests/Volo/Abp/RabbitMQ/ChannelPool_Tests.cs

1
framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ChannelPool.cs

@ -92,6 +92,7 @@ public class ChannelPool : IChannelPool, ISingletonDependency
{ {
if (staleItem != null) if (staleItem != null)
{ {
staleItem.WaitIfInUse(TotalDisposeWaitDuration);
await staleItem.DisposeAsync(); await staleItem.DisposeAsync();
} }
} }

8
framework/test/Volo.Abp.RabbitMQ.Tests/Volo/Abp/RabbitMQ/ChannelPool_Tests.cs

@ -40,13 +40,13 @@ public class ChannelPool_Tests
var firstCaller = Task.Run(async () => var firstCaller = Task.Run(async () =>
{ {
barrier.SignalAndWait(); barrier.SignalAndWait(RaceTimeout);
using var accessor = await channelPool.AcquireAsync("q"); using var accessor = await channelPool.AcquireAsync("q");
}); });
var secondCaller = Task.Run(async () => var secondCaller = Task.Run(async () =>
{ {
barrier.SignalAndWait(); barrier.SignalAndWait(RaceTimeout);
await Task.Delay(50); await Task.Delay(50);
using var accessor = await channelPool.AcquireAsync("q"); using var accessor = await channelPool.AcquireAsync("q");
}); });
@ -85,7 +85,7 @@ public class ChannelPool_Tests
{ {
tasks[i] = Task.Run(async () => tasks[i] = Task.Run(async () =>
{ {
barrier.SignalAndWait(); barrier.SignalAndWait(RaceTimeout);
using var accessor = await channelPool.AcquireAsync("q"); using var accessor = await channelPool.AcquireAsync("q");
return accessor.Channel; return accessor.Channel;
}); });
@ -292,7 +292,7 @@ public class ChannelPool_Tests
{ {
tasks[i] = Task.Run(async () => tasks[i] = Task.Run(async () =>
{ {
barrier.SignalAndWait(); barrier.SignalAndWait(RaceTimeout);
using var accessor = await channelPool.AcquireAsync("q"); using var accessor = await channelPool.AcquireAsync("q");
return accessor.Channel; return accessor.Channel;
}); });

Loading…
Cancel
Save