概述
由于单元测试是单线程执行,而很多时候需要异步执行的方法时,就需要使用异步等待方法来帮助测试工程等待线程执行结束
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等待线程方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复