异步就是方法异步执行, 这个好理解。

异步有啥用?

以前只是听说过, 也不想计较。 不过还是碰到了需要这个东西的时候。

比如:

定时执行, 如果不用异步方法,也不用定时器,只用Thread.Sleep来间隔。

执行方法本身需要时间,这样定时的意义就变了——两次的执行时间肯定相隔不止1分钟了。

下面是实现异步最简单的一个demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics; namespace ConsoleApplication20
{
class Program
{
public delegate void TestDelegate(string name);
static void Main(string[] args)
{
TestDelegate d = Test;
Console.WriteLine("Beginning : {0:yyyy-MM-dd HH:mm:ss.fff}", DateTime.Now);
d.BeginInvoke("小明1", null, null);
d.BeginInvoke("小明2", null, null);
d.BeginInvoke("小明3", null, null);
d.BeginInvoke("小明4", null, null);
d.BeginInvoke("小明5", null, null);
Console.WriteLine("End : {0:yyyy-MM-dd HH:mm:ss.fff}", DateTime.Now); Console.Read();
} static void Test(string name)
{
Console.WriteLine("TestMethod: {0:yyyy-MM-dd HH:mm:ss.fff} {1}", DateTime.Now, name);
}
}
}

由结果可见: BeginInvoke调用时确实是异步的。

附:定时器代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
using System.Threading; namespace ConsoleApplication21
{
class Program
{
static void Main(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Enabled = true;
timer.Interval = ;
timer.Start(); timer.Elapsed += new ElapsedEventHandler(PrintPoint);
Console.WriteLine("End");
Console.Read();
} static void PrintPoint(object sender, ElapsedEventArgs e)
{
DateTime dtCurr = DateTime.Now;
Console.WriteLine("{0:yyyy-MM-dd HH:mm:ss.fff}", dtCurr);
Thread.Sleep();
Console.WriteLine("{0:yyyy-MM-dd HH:mm:ss.fff}_{1:yyyy-MM-dd HH:mm:ss.fff}", dtCurr, DateTime.Now);
}
}
}
 

由结果可见:定时器的事件也是异步的, 每个事件即使执行时间较长, 也不会造成下一个定时事件的延时执行。

原文出处:http://blog.csdn.net/yenange/article/details/50541421

C#异步:实现一个最简单的异步的更多相关文章

  1. 简单实现异步编程promise模式

    本篇文章主要介绍了异步编程promise模式的简单实现,并对每一步进行了分析,需要的朋友可以参考下 异步编程 javascript异步编程, web2.0时代比较热门的编程方式,我们平时码的时候也或多 ...

  2. Windows窗体应用程序(非Console)使用libuv实现简单的异步WEB服务器

    libuv是一个很强大的异步处理框架(严格意义上不能叫框架,其实就是一组异步函数库,当然框架这东西有各种各样的定义和理解_^...),最初的的目的是用于NODEJS的异步处理,不过因为它是一个独立的项 ...

  3. 【javascript】Promise/A+ 规范简单实现 异步流程控制思想

    ——基于es6:Promise/A+ 规范简单实现 异步流程控制思想  前言: nodejs强大的异步处理能力使得它在服务器端大放异彩,基于它的应用不断的增加,但是异步随之带来的嵌套.难以理解的代码让 ...

  4. 简单的异步Socket实现——SimpleSocket_V1.1

    简单的异步Socket实现——SimpleSocket_V1.1 笔者在前段时间的博客中分享了一段简单的异步.net的Socket实现.由于是笔者自己测试使用的.写的很粗糙.很简陋.于是花了点时间自己 ...

  5. Android多线程分析之中的一个:使用Thread异步下载图像

    Android多线程分析之中的一个:使用Thread异步下载图像 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可.转载请注明出处 打算整理一下对 Android Fr ...

  6. Android异步处理之AsyncTaskLoader简单使用

    简介 不管是在Android应用开发还是Android平台开发中,异步处理通常是最基本的coding要求.如果你还在主线程中写一些数据库,网络请求,读写本地文件等操作的话那说明你还不是一个合格的And ...

  7. [译]Python中的异步IO:一个完整的演练

    原文:Async IO in Python: A Complete Walkthrough 原文作者: Brad Solomon 原文发布时间:2019年1月16日 翻译:Tacey Wong 翻译时 ...

  8. 使用C++11实现一个半同步半异步线程池

    前言 C++11之前我们使用线程需要系统提供API.posix线程库或者使用boost提供的线程库,C++11后就加入了跨平台的线程类std::thread,线程同步相关类std::mutex.std ...

  9. 用ajax异步请求一个块

    使用用户控件,作为一个块,生成一段独立的html. 请求一个一般应用程序,在一般应用程序中加载读取用户控件,并给用户控件传值.     Page page = new Page();          ...

随机推荐

  1. 3801. String LD

    Description Stringld (left delete) is a function that gets a string and deletes its leftmost charact ...

  2. POJ 2402 Palindrome Numbers

    题目链接 水题,LA我居然没找到在那里. #include <cstdio> #include <cstring> #include <string> #inclu ...

  3. ubuntu 无声音的解决

    以下“失声疗法”是针对HDMI被设置为默认输出的情况: aplay -l 是用来查看音视频设备与卡号信息的: 然后 1.sudo gedit /etc/asound.conf 2.在文件中写入defa ...

  4. hbase的查询scan功能注意点(setStartRow, setStopRow)

    来自http://hi.baidu.com/7636553/blog/item/982beb17713bc004972b43ee.html hbase的scan查询功能注意项: Scan scan = ...

  5. 分馅饼 Pie

    Pie 链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/C 题目: Problem Description ...

  6. Hadoop.2.x_网站PV示例

    一.网站基本指标(即针对于网站用户行为而产生的日志中进行统计分析) 1. PV:网页浏览量(Page View页面浏览次数,只要进入该网页就产生一条记录,不限IP,统计点每天(较多)/每周/每月/.. ...

  7. jQuery获取Ajax函数的返回值

    参考自: http://blog.csdn.net/crx05/article/details/7362252 function test() { var myText = ""; ...

  8. Oracle手工建库

    环境准备 手工建库的前提是ORACLE软件已经正确安装到操作系统中,只是需要我们利用ORACLE软件提供的一些工具和脚本来创建一个数据库,创建这个数据库可以运行DBCA工具图形化创建,也可以使用CRE ...

  9. 一个参数大小写引发的uploadify报错 "Syntax error, unrecognized expression: #"

     上传控件uploadify 报错"Syntax error, unrecognized expression: #" 版本为 uploadify3.2  报错原因:参数ID[hi ...

  10. VMware+Fedora20+secureCRT7.0配置心得

    VMware10 XX版 下载地址 secureCRT7 XX版 下载地址 做好安装等准备工作,打开Fedora虚拟机: 首先.安装openssh-server yum install openssh ...