Async_Study
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的更多相关文章
随机推荐
- webpack 添加eslint代码审查
1). 添加包 npm install eslint --save-dev npm install eslint-loader --save-dev npm install eslint-plugin ...
- docker镜像管理和dockerfile详解(8)
docker镜像加速 docker-io先到 https://cr.console.aliyun.com/ 注册一下,登录成功后,在控制台,看左侧,有一个加速器按钮,点开找到自己的专属加速链接,我的是 ...
- error LNK2001: unresolved external symbol "public: __thiscall CWinAppEx::CWinAppEx(int)" (??0CWinApp
1.这个是网上找的别人的解决办法,本人没试过 解决办法: 网上大多说的这类似问题是解决自定义类的,可是这个连接是系统CWinAppEx,网上查了很久也没找到原因,重装了vs也没解决.后面在google ...
- CSS:CSS 伪元素
ylbtech-CSS:CSS 伪元素 1.返回顶部 1. CSS 伪元素 CSS伪元素是用来添加一些选择器的特殊效果. 语法 伪元素的语法: selector:pseudo-element {pro ...
- 输入流当中的read方法和readfully方法的区别与原理
原文链接:https://blog.csdn.net/yangjingyuan/article/details/6151234?locationNum=3 DataInputStream类中的read ...
- 1、postman介绍与安装
postman介绍 官方介绍:Developers use Postman to build modern software for the API-first world. 个人理解postman是 ...
- Java jar文件
JAR(Java Archive)是基于ZIP文件格式的文件格式. 它用于捆绑Java应用程序或小程序的资源,类文件,声音文件,图像等. 它还提供数据压缩.一个JAR文件作为一种特殊类型的ZIP文件. ...
- Java内存通道
对文件执行I/O的另一种方法是将文件的一个区域映射到物理内存,并将其作为内存数组.可以使用MappedByteBuffer来执行内存映射文件I/O. 要使用内存映射文件I/O,请为文件获取FileCh ...
- 用js onselectstart事件鼠标禁止选中文字
禁止鼠标选中文本,针对不同浏览器有不同的写法.常见的是onselectstart表示禁止鼠标选中文本.其中用js可以在页面中写 onselectstart="return false&quo ...
- DNF抽奖活动
活动内容: DNF用户在注册页面注册获得抽奖资格(或分享好友注册)参与抽奖,产生奖品后,活动参与用户,在活动领奖页面领取奖品,金币及点券需填写相应游戏区服.qq号等信息,并且为防止活动刷子,在领取页提 ...