首页 新闻 会员 周边 捐助

创建一个异步任务,每隔一秒打印当前时间,大家分析下这两种实现的异同吧,也可以说说自己的实现方案

0
[待解决问题]

需求为 : 创建一个异步的任务,每隔一秒打印一下当前的时间。
以下有两种实现方案,大家帮忙看下这两种方案各自有什么优缺点。
或者给一下你自己的实现方案吧。

实现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         }
Shawn.Cheng的主页 Shawn.Cheng | 菜鸟二级 | 园豆:202
提问于:2015-05-15 13:26
< >
分享
所有回答(2)
0
static async Task CreateJob3()
{
    while (true)
    {
        await Task.Delay(1000 * 1);
        Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
    }
}
dudu | 园豆:29642 (高人七级) | 2015-05-15 14:21

为什么我每次看到没有break的循环心里都觉得不舒服。总担心会有问题一样。。另外,如果持久运行,dudu觉得那个用递归会不会很有问题,在性能上。

async这些关键字确实很好用啊。

支持(0) 反对(0) Shawn.Cheng | 园豆:202 (菜鸟二级) | 2015-05-15 19:55

@Shawn.Cheng: 递归会带来调用栈的开销(call stack)

支持(0) 反对(0) dudu | 园豆:29642 (高人七级) | 2015-05-17 10:52
0

同意楼上的观点,其实我也有查找过关于Task.Delay的东西

http://blog.csdn.net/myjalo/article/details/19114675

可以去看看,我个人觉得实现1应该是比较好的。

其实博客园之前应该是有提问的,地址如下:http://q.cnblogs.com/q/48890/

想要飞 | 园豆:11 (初学一级) | 2015-05-19 17:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册