我是靠谱客的博主 不安树叶,最近开发中收集的这篇文章主要介绍单元测试需要异步测试时使用的WaitCallbackHelper等待线程方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

由于单元测试是单线程执行,而很多时候需要异步执行的方法时,就需要使用异步等待方法来帮助测试工程等待线程执行结束

using System.Diagnostics;
using System.Threading;

namespace QuJiaoUnitTest
{
    public class WaitCallbackHelper
    {
        #region 构造函数
        static WaitCallbackHelper instance;
        public static WaitCallbackHelper Instance => instance ?? (instance = new WaitCallbackHelper());
        public WaitCallbackHelper()
        {
            instance = this;
        }
        #endregion

        bool _isWaiting = true;

        /// <summary>
        /// 绿灯
        /// </summary>
        public void Set()
        {
            _isWaiting = false;
        }

        /// <summary>
        /// 红灯
        /// </summary>
        public void Reset()
        {
            _isWaiting = true;
        }

        /// <summary>
        /// 等待信号
        /// </summary>
        /// <param name="millisecondsTimeout">等待毫秒数
        /// 1. 为正值时按毫秒时间等待
        /// 2. 为负值时按信号灯等待
        /// </param>
        /// <param name="ticktack">心跳毫秒</param>
        /// <param name="autoReset">自动重置信号灯,默认为true</param>
        public void WaitOne(int millisecondsTimeout = Timeout.Infinite, int ticktack = 1000, bool autoReset = true)
        {
            if (autoReset) Reset();
            if (millisecondsTimeout < 0)
            {
                Debug.WriteLine($"执行无限等待,心跳毫秒: {ticktack}");
                while (_isWaiting)
                {
                    Thread.Sleep(ticktack);
                }
            }
            else
            {
                Debug.WriteLine($"执行有限等待,等待毫秒: {millisecondsTimeout}");
                Thread.Sleep(millisecondsTimeout);
            }
        }
    }
}

使用方法:

其实微软还有一套官方实现的异步等待线程的方法

AutoResetEvent和ManualResetEvent,区别在于:

AutoResetEvent   收到 Set 后 , 一次只能执行一个线程,其它线程继续 WaitOne 。

ManualResetEvent  收到 Set 后,所有处理 WaitOne 状态线程均继续执行。

示例代码:

最后

以上就是不安树叶为你收集整理的单元测试需要异步测试时使用的WaitCallbackHelper等待线程方法的全部内容,希望文章能够帮你解决单元测试需要异步测试时使用的WaitCallbackHelper等待线程方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部