using Falcon.SugarApi.BackTask; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Threading; using System; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Hosting; using System.Threading.Tasks; namespace Falcon.SugarApi.Test { [TestClass] public class BackTaskTest { [TestMethod] public void BackgroundLongTaskTestMethod() { var task = new BackTaskObject(); Assert.IsTrue(task.State == 0, "初始化状态错误"); var token = new CancellationTokenSource(); task.StartAsync(token.Token); Thread.Sleep(1 * 1000); Assert.IsTrue(task.State == 1, "启动状态错误"); Thread.Sleep(5 * 1000); task.StopAsync(token.Token).Wait(); Thread.Sleep(2 * 1000); Assert.IsTrue(task.State == 2, "停止状态错误"); Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss")}:测试完成"); var asyncTask = new BackTaskAsync(); Console.WriteLine("启动异步任务"); asyncTask.StartAsync(token.Token).Wait(); Thread.Sleep(10 * 1000); Console.WriteLine("停止异步任务"); asyncTask.StopAsync(token.Token).Wait(); } } public class BackTaskAsync : BackTaskObject { public BackTaskAsync() { this.Log = new TestLog(); } public override float RunTimespan => 1; protected async override Task RunAsync() { this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:BackTaskAsync Run!"); //Thread.Sleep(3 * 1000); await Task.Delay(new TimeSpan(0,0,3)); await Task.CompletedTask; } } public class BackTaskObject : BackgroundLongTask { public override float RunTimespan => 1; public ILogger Log { get; set; } public int State { get; set; } = 0; public BackTaskObject() { this.Log = new TestLog(); } protected override void OnStop(BackgroundLongTask t) { State = 2; this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:Test OnStop!"); base.OnStop(t); } protected override void OnStart(BackgroundLongTask t) { State = 1; this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:Test OnStart!"); base.OnStart(t); } protected override void OnCompleted(BackgroundLongTask t) { this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:Test OnCompleted!"); base.OnCompleted(t); } protected override Task RunAsync() { this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:Test Run!"); return Task.CompletedTask; } } }