解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
1.75 KiB
X
using NewLife.Threading;
using Xunit;

namespace XUnitTest.Threading;

/// <summary>线程池助手测试</summary>
public class ThreadPoolXTests
{
    [Fact(DisplayName = "Init不抛异常")]
    public void InitDoesNotThrow()
    {
        // Init触发静态构造函数,设置最小线程数
        ThreadPoolX.Init();

        ThreadPool.GetMinThreads(out var wt, out var io);
        Assert.True(wt > 0);
        Assert.True(io > 0);
    }

    [Fact(DisplayName = "QueueUserWorkItem执行回调")]
    public async Task QueueUserWorkItemExecutes()
    {
        var tcs = new TaskCompletionSource<Boolean>();
        ThreadPoolX.QueueUserWorkItem(() => tcs.SetResult(true));

        var result = await tcs.Task;
        Assert.True(result);
    }

    [Fact(DisplayName = "QueueUserWorkItem泛型执行回调")]
    public async Task QueueUserWorkItemGenericExecutes()
    {
        var tcs = new TaskCompletionSource<Int32>();
        ThreadPoolX.QueueUserWorkItem<Int32>(val => tcs.SetResult(val), 42);

        var result = await tcs.Task;
        Assert.Equal(42, result);
    }

    [Fact(DisplayName = "null回调安全忽略")]
    public void NullCallbackIgnored()
    {
        // 不应抛异常
        ThreadPoolX.QueueUserWorkItem((Action)null!);
        ThreadPoolX.QueueUserWorkItem<Int32>(null!, 0);
    }

    [Fact(DisplayName = "回调异常不抛出")]
    public async Task CallbackExceptionDoesNotThrow()
    {
        var done = new ManualResetEventSlim(false);
        ThreadPoolX.QueueUserWorkItem(() =>
        {
            try
            {
                throw new InvalidOperationException("test");
            }
            finally
            {
                done.Set();
            }
        });

        Assert.True(done.Wait(5000));
    }
}