合并
石头 authored at 2024-11-24 11:23:32
1.02 KiB
X
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using NewLife.Caching;
using NewLife.Log;
using Xunit;

namespace XUnitTest.Caching;

public class MemoryQueueTests
{
    [Fact]
    public async void Test1()
    {
        XTrace.WriteLine("MemoryQueueTests.Test1");

        var q = new MemoryQueue<String>();

        Assert.True(q.IsEmpty);
        Assert.Equal(0, q.Count);

        q.Add("test");
        q.Add("newlife", "stone");

        Assert.False(q.IsEmpty);
        Assert.Equal(3, q.Count);

        var s1 = q.TakeOne();
        Assert.Equal("test", s1);

        var ss = q.Take(3).ToArray();
        Assert.Equal(2, ss.Length);

        XTrace.WriteLine("begin TokeOneAsync");
        ThreadPool.QueueUserWorkItem(s =>
        {
            Thread.Sleep(1100);
            XTrace.WriteLine("add message");
            q.Add("delay");
        });

        var s2 = await q.TakeOneAsync(15, default);
        XTrace.WriteLine("end TokeOneAsync");
        Assert.Equal("delay", s2);
    }
}