实现一:
static void Main(string[] args)
{
//实现每隔两秒钟输出一次
var t = 0;
var timer = new System.Timers.Timer();
timer.Interval = 600000;//单位毫秒,这里是10分钟
timer.Enabled = true;
Console.WriteLine($"开始写入{DateTime.Now}");
timer.Elapsed += (o, a) =>
{
if (t == 0)
{
Console.WriteLine($"写入{DateTime.Now}");
}
else
{
//定时任务结束
timer.Stop();
timer.Enabled = false;
}
};
timer.Start();
Console.Read();
}
实现二: 其实和实现一类似
static protected void SetOndDayTimer()
{
Console.WriteLine($"我是定时任务-------{DateTime.Now}");
System.Timers.Timer timer = new System.Timers.Timer(60000);//周期调用方法间隔时间ms
timer.Elapsed += new System.Timers.ElapsedEventHandler(Update);//绑定事件方法
timer.AutoReset = true;//设置一直循环调用;若设置timer.AutoReset = false;只调用一次绑定方法
timer.Start();//开启定时器事件或者写成timer.Enabled = true;
}
static private void Update(object sender, ElapsedEventArgs e)
{
Console.WriteLine($"定时任务执行-------{DateTime.Now}");
}
实现三:此方法只适合在循环中使用属于间隔执行(此方法只能在60秒以内的条件且不包含60秒,超过60s,span.Seconds又从1开始计算了)
//实现每隔两秒钟输出一次
Console.WriteLine($"开始写入{DateTime.Now}");
DateTime ProgramRunTime = DateTime.Now;//第一次执行的时间
DateTime ThreadTime = DateTime.Now;//当前执行时间
TimeSpan span = ThreadTime - ProgramRunTime;
if (span.Seconds > 2)//每隔2秒执行一次
{
Console.WriteLine($"写入{DateTime.Now}");
}
Console.Read();
实现四:
//延迟调用
DelayInvoke(() =>
{
//DO
}, 1800);
//定时调用
RegularInvoke(() =>
{
//DO
}, 1800);
/// <summary>
/// 延迟调用
/// </summary>
/// <param name="method"></param>
/// <param name="delayTime"></param>
public static void DelayInvoke(Action method, int delayTime = 2000)
{
RegularInvoke(method, delayTime, false);
}
/// <summary>
/// 定时调用
/// </summary>
/// <param name="method"></param>
/// <param name="delayTime"></param>
/// <param name="aotoReset"></param>
public static void RegularInvoke(Action method, int delayTime, bool aotoReset = true)
{
System.Timers.Timer timer = new System.Timers.Timer(delayTime);
timer.Elapsed += new System.Timers.ElapsedEventHandler((a, b) =>
{
method();
});
//执行一次 false
timer.AutoReset = aotoReset;
//是否执行System.Timers.Timer.Elapsed事件
timer.Enabled = true;
}
或者
Console.WriteLine($"执行1{DateTime.Now}");
Task.Factory.StartNew(() =>
{
Console.WriteLine($"执行2{DateTime.Now}");
Task.Delay(10000).Wait();
Console.WriteLine($"延迟执行{DateTime.Now}");
});
Console.ReadKey();