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的更多相关文章
随机推荐
- 思维构造+匹配——cf1199E
直接枚举每条边,如果边加到图中后还是个匹配图,就直接加,反之就不加 这样加完所有边后,剩下的点必定可以组成一个独立集:因为如果剩下的点中还有互相匹配的,那么这对点应该在加边时就被算到匹配图中 所以要么 ...
- 使用PHP curl模拟浏览器抓取网站信息
curl是一个利用URL语法在命令行方式下工作的文件传输工具.curl是一个利用URL语法在命令行方式下工作的文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER ...
- go gin
1.安装 go get -u github.com/gin-gonic/gin 2. package main import "github.com/gin-gonic/gin" ...
- Leetcode刷题——007.整数反转
上代码: #include <cmath> class Solution { public: int reverse(int x) { ; long long tx=llabs(x); ) ...
- 洛谷 P1613 跑路 (倍增 + DP + 最短路)
题目链接:P1613 跑路 题意 给定包含 \(n\) 个点和 \(m\) 条边的有向图,每条边的长度为 \(1\) 千米.每秒钟可以跑 \(2^k\) 千米,问从点 \(1\) 到点 \(n\) 最 ...
- POJ 1269 Intersecting Lines (判断直线位置关系)
题目链接:POJ 1269 Problem Description We all know that a pair of distinct points on a plane defines a li ...
- PAT_A1062#Talent and Virtue
Source: PAT A1062 Talent and Virtue (25 分) Description: About 900 years ago, a Chinese philosopher S ...
- IceCTF-Matrix
解题思路: 参考了鸽子小姐姐的脚本:https://zhuanlan.zhihu.com/p/22678856 具体题目就不贴了. 题目中提示将问题图像化,猜测是将这些16进制数转化为图像,尝试将16 ...
- ATM+购物车结构
ATM+购物车 1.需求分析 2.程序设计及目录设计 3.编写程序 4.调试程序
- NIO 源码分析(02-2) BIO 源码分析 Socket
目录 一.BIO 最简使用姿势 二.connect 方法 2.1 Socket.connect 方法 2.2 AbstractPlainSocketImpl.connect 方法 2.3 DualSt ...