需求为 : 创建一个异步的任务,每隔一秒打印一下当前的时间。
以下有两种实现方案,大家帮忙看下这两种方案各自有什么优缺点。
或者给一下你自己的实现方案吧。
实现1
1 static void Main(string[] args) 2 { 3 createJob1(); 4 5 Console.ReadLine(); 6 } 7 8 /// <summary> 9 /// createjob 本身需要是异步的,调用后立即返回 10 /// </summary> 11 static void crateJob1() 12 { 13 new Task(()=>{ 14 while (true) 15 { 16 Thread.Sleep(1000 * 1); 17 Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); 18 } 19 }).Start(); 20 }
实现2
1 static void Main(string[] args) 2 { 3 createJob2(); 4 5 Console.ReadLine(); 6 } 7 8 9 /// <summary> 10 /// createjob 本身需要是异步的,调用后立即返回 11 /// </summary> 12 static Task createJob2() 13 { 14 return Task.Delay(1000 * 1).ContinueWith(t => 15 { 16 Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); 17 createJob2(); 18 }); 19 }
static async Task CreateJob3() { while (true) { await Task.Delay(1000 * 1); Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); } }
为什么我每次看到没有break的循环心里都觉得不舒服。总担心会有问题一样。。另外,如果持久运行,dudu觉得那个用递归会不会很有问题,在性能上。
async这些关键字确实很好用啊。
@Shawn.Cheng: 递归会带来调用栈的开销(call stack)
同意楼上的观点,其实我也有查找过关于Task.Delay的东西
http://blog.csdn.net/myjalo/article/details/19114675
可以去看看,我个人觉得实现1应该是比较好的。
其实博客园之前应该是有提问的,地址如下:http://q.cnblogs.com/q/48890/