public class TestTask {
public async Task PeriodicFooAsync(int millisecondsDelay, CancellationToken cancellationToken) {
while (true) {
string msg = await FooAsync();
Console.WriteLine($"{msg} {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} {Thread.CurrentThread.ManagedThreadId}");
await Task.Delay(millisecondsDelay, cancellationToken);
}
}
public async Task<string> FooAsync() {
return await Task<string>.Factory.StartNew(() => {
Thread.Sleep(5000);
return "Test";
});
}
}
class Program {
static void Main(string[] args) {
CancellationTokenSource cancelToken = new CancellationTokenSource();
TestTask t = new TestTask();
Task.Factory.StartNew(()=> t.PeriodicFooAsync(2000, cancelToken.Token));
var code = Console.ReadLine();
if(code == "stop") {
cancelToken.Cancel();
cancelToken.Dispose();
}
Console.Read();
}
}