Esempio n. 1
0
        static void PrintPageLength()
        {
            Task <int> lengthTask = AsyncTask.GetPageLengthAsync("http://csharpindepth.com");

            Console.WriteLine(lengthTask.Result);
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            new AsyncTask().DisplayWebSite();
            Thread.Sleep(1000); //等待异步消息
            Console.WriteLine("now get the length...");
            var task = AsyncTask.MainAsync();

            PrintPageLength();
            task.Wait();

            //任务的取消
            Task t2 = AsyncTask.ThrowCancellationException();

            Console.WriteLine(task.Status);
            Console.WriteLine(t2.Status);

            //取消的延迟操作来取消异步方法
            var source = new CancellationTokenSource();
            var t3     = AsyncTask.DelayFor30Seconds(source.Token);

            source.CancelAfter(TimeSpan.FromSeconds(1));
            Console.WriteLine("Initial satus: {0}", t3.Status);
            try
            {
                t3.Wait();
            }
            catch (AggregateException e)
            {
                Console.WriteLine("Caught {0}", e.InnerExceptions[0]);
            }
            Console.WriteLine("Final Status: {0}", t3.Status);

            //创建异步匿名函数
            Func <Task> lambda = async() => await Task.Delay(1000);

            Func <Task <int> > anonMethod = async delegate()
            {
                Console.WriteLine("Started");
                await Task.Delay(1000);

                Console.WriteLine("Finished");
                return(10);
            };

            Console.WriteLine("start lambda...");
            lambda();
            Console.WriteLine("start anonMethod...");
            var b = anonMethod();

            Console.WriteLine(b.Result);

            //使用lambda表达式创建并调用一个异步函数
            Func <int, Task <int> > function = async x =>
            {
                Console.WriteLine("Starting... x={0}", x);
                await Task.Delay(x * 1000);

                Console.WriteLine("Finished... x={0}", x);
                return(x * 2);
            };
            Task <int> first  = function(5);
            Task <int> second = function(3);

            Console.WriteLine("First result: {0}", first.Result);
            Console.WriteLine("Second result: {0}", second.Result);

            Console.WriteLine("get total length");
            Console.WriteLine(AsyncTask.ShowPageLengthsAsync("https://www.baidu.com", "https://www.google.com", "https://www.ithome.com").Result);
        }