异步延时启动

这段代码有点绕,很搞。

class Program
    {
        public static Task<DateTimeOffset> Delay(int millisecondsTimeout)
        {
            TaskCompletionSource<DateTimeOffset> tcs = null;
            Timer timer = null;

            timer = new Timer(delegate
            {
                timer.Dispose();
                //这里插入操作
                tcs.TrySetResult(DateTimeOffset.UtcNow);
            }, null, Timeout.Infinite, Timeout.Infinite);

            tcs = new TaskCompletionSource<DateTimeOffset>(timer);
            Console.WriteLine("时间开始:" + DateTimeOffset.UtcNow);
            timer.Change(millisecondsTimeout, Timeout.Infinite);
            return tcs.Task;
        }


        static void Main(string[] args)
        {
           Task<DateTimeOffset > task =  Program.Delay(10000);
           Console.WriteLine("时间终止:"+ task.Result);
            Console.Read();
        }
    }

 

 


posted @ 2013-04-11 12:39  grkin  阅读(269)  评论(0编辑  收藏  举报