using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Net;
using System.Diagnostics; namespace Async_Study
{
class Program
{ //创建计时器
private static readonly Stopwatch Watch = new Stopwatch();
static void Main(string[] args)
{
//WithoutAsync();
WhitAsync();
} static string Greeting( string name )
{
Task task1= Task.Delay(3000);
task1.Wait(); return "Hello"+ name;
} static Task<string> GreetingAsync(string name)
{
Task<string> mytask= Task.Run<string>(()=> { return Greeting(name); });
return mytask;
} private async static void CallerwithAsync()
{
string result = await GreetingAsync("House"); Console.WriteLine(result);
} #region 未使用异步编程
private static void WithoutAsync()
{
Watch.Start();
const string url1 = "http://www.cnblogs.com/";
const string url2 = "http://www.cnblogs.com/liqingwen/";
//两次调用 CountCharacters 方法(下载某网站内容,并统计字符的个数)
var result1 = CountCharacters(1, url1);
var result2 = CountCharacters(2, url2);
//三次调用 ExtraOperation 方法(主要是通过拼接字符串达到耗时操作)
for (var i = 0; i < 3; i++)
{
ExtraOperation(i + 1); } Console.WriteLine($"{url1} 的字符个数:{result1}");
Console.WriteLine($"{url2} 的字符个数:{result2}");
Console.Read();
} /// <summary>
/// 统计字符个数
/// </summary>
/// <param name="id"></param>
/// <param name="address"></param>
/// <returns></returns>
private static int CountCharacters(int id, string address)
{
WebClient wc = new WebClient();
Console.WriteLine($"开始调用 id = {id}:{Watch.ElapsedMilliseconds} ms"); var result = wc.DownloadString(address);
Console.WriteLine($"调用完成 id = {id}:{Watch.ElapsedMilliseconds} ms"); return result.Length;
} /// <summary>
/// 额外操作
/// </summary>
/// <param name="id"></param>
private static void ExtraOperation(int id)
{
//这里是通过拼接字符串进行一些相对耗时的操作
var s = ""; for (var i = 0; i < 6000; i++)
{
s += i;
} Console.WriteLine($"id = {id} 的 ExtraOperation 方法完成:{Watch.ElapsedMilliseconds} ms");
} #endregion #region 使用异步编程 private static void WhitAsync ()
{
//启动计时器
Watch.Start(); const string url1 = "http://www.cnblogs.com/";
const string url2 = "http://www.cnblogs.com/liqingwen/"; //两次调用 CountCharactersAsync 方法(异步下载某网站内容,并统计字符的个数)
Task<int> t1 = CountCharactersAsync(1, url1);
int result1= t1.Result;
Task<int> t2 = CountCharactersAsync(2, url2);
int result2 = t2.Result; //三次调用 ExtraOperation 方法(主要是通过拼接字符串达到耗时操作)
for (var i = 0; i < 3; i++)
{
ExtraOperation(i + 1);
} //控制台输出
Console.WriteLine($"{url1} 的字符个数:{t1.Result}");
Console.WriteLine($"{url2} 的字符个数:{t2.Result}"); Console.Read();
} /// <summary>
/// 统计字符个数
/// </summary>
/// <param name="id"></param>
/// <param name="address"></param>
/// <returns></returns>
private static async Task<int> CountCharactersAsync(int id, string address)
{
var wc = new WebClient();
Console.WriteLine($"开始调用 id = {id}:{Watch.ElapsedMilliseconds} ms"); var result = await wc.DownloadStringTaskAsync(address);
Console.WriteLine($"调用完成 id = {id}:{Watch.ElapsedMilliseconds} ms"); return result.Length;
} #endregion }
}

  

Async_Study的更多相关文章

随机推荐

  1. 使用Vue和djangoframwork完成登录页面构建 001

    使用Vue和djangoframwork完成登录页面构建 001 环境的搭建 首先,我在我的电脑的F盘创建了一个文件夹 forNote,进入到这个文件夹中 F:\forNote> vue环境的搭 ...

  2. apue.h报错问题

    下载apue.3e后进入make,提示错误如下: collect2: error: exit status Makefile:: recipe for target 'badexit2' failed ...

  3. 高级运维(六):源码安装Redis缓存服务、常用Redis数据库操作指令、配置Redis主从服务器

    一.源码安装Redis缓存服务 目标: 本案例要求先快速搭建好一台Redis服务器,并测试该缓存服务器: 1> 设置变量test,值为123 2> 查看变量test的值 3> 设置计 ...

  4. Linux下常用的配置文件位置

    1.别名配置文件 [root@room8pc205 ~]# vim /root/.bashrc     #此处是root用户定义的别名文件的位置,只有root用户登录可用 [root@room8pc2 ...

  5. BZOJ 1303: [CQOI2009]中位数图(思路题)

    传送门 解题思路 比较好想的思路题.首先肯定要把原序列转化一下,大于\(k\)的变成\(1\),小于\(k\)的变成\(-1\),然后求一个前缀和,还要用\(cnt[]\)记录一下前缀和每个数出现了几 ...

  6. EXCEL2016 OLE/COM开发-常用功能封装代码

    hpp #pragma once #include "stdafx.h" #include "CApplication.h" #include "CW ...

  7. (转)Linux下使用system()函数一定要谨慎

    转:http://my.oschina.net/renhc/blog/53580 曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入.只是简单的知道用这个函 ...

  8. php开发面试题---1、php常用面试题一(PHP有哪些特性)

    php开发面试题---1.php常用面试题一(PHP有哪些特性) 一.总结 一句话总结: ①.混合语法:php独特混合了C,Java,Prel以及PHP自创的语法. ②.为动态网页而生:可以比CGI或 ...

  9. yum 快速LAMP/LNMP 安装(centos7+mysql5.7+apache+php5.6 (缺点:好多模块没有加载)

    1.安装Apache 安装centos7默认自带(Apache2.4.6)版本 yum -y install httpd 2.开启apache服务 systemctl start httpd.serv ...

  10. 京东云Ubuntu下安装mysql

    1.sudo apt-get install mysql-server,输入y后输入密码 2.sudo apt isntall mysql-client 3.sudo apt install libm ...