C#中关于异步的三种写法

1 投票

IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);

while (!ar.IsCompleted)

class Program

{

static int TakesAWhile(int data, int ms)

{

Console.WriteLine("TakesAWhile started");

Thread.Sleep(ms);

Console.WriteLine("TakesAWhile completed");

return ++data;

}

public delegate int TakesAWhileDelegate(int data, int ms);

static void Main(string[] args)

{

TakesAWhileDelegate d1 = TakesAWhile;

IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);

while (!ar.IsCompleted)

{

// doing something else

Console.Write(".");

Thread.Sleep(50);

}

int result = d1.EndInvoke(ar);

Console.WriteLine("result: {0}", result);

Console.ReadLine();

}

}

2 等待句柄 

class Program

{

static int TakesAWhile(int data, int ms)

{

Console.WriteLine("TakesAWhile started");

Thread.Sleep(ms);

Console.WriteLine("TakesAWhile completed");

return ++data;

}

public delegate int TakesAWhileDelegate(int data, int ms);

static void Main(string[] args)

{

TakesAWhileDelegate d1 = TakesAWhile;

IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);

int i = 0;

while (true)

{

Console.Write(i++);

Console.Write(".");

if (ar.AsyncWaitHandle.WaitOne(50, true))

{

Console.WriteLine("Can get the result now");

break;

}

}

int result = d1.EndInvoke(ar);

Console.WriteLine("result: {0}", result);

}

}

3 回调 pdf533  p509

class Program

{

static int TakesAWhile(int data, int ms)

{

Console.WriteLine("TakesAWhile started");

Thread.Sleep(ms);

Console.WriteLine("TakesAWhile completed");

return ++data;

}

public delegate int TakesAWhileDelegate(int data, int ms);

static void Main(string[] args)

{

TakesAWhileDelegate d1 = TakesAWhile;

IAsyncResult ar = d1.BeginInvoke(1, 3000, TakesAWhileCompleted, d1);

for (int i = 0; i < 100; i++)

{

Console.Write(".");

Thread.Sleep(50);

}

Console.ReadLine();

}

static void TakesAWhileCompleted(IAsyncResult ar)

{

if (ar == null) throw new ArgumentNullException("ar");

TakesAWhileDelegate d1 = ar.AsyncState as TakesAWhileDelegate;

Trace.Assert(d1 != null, "Invalid object type");

int result = d1.EndInvoke(ar);

Console.WriteLine("result: {0}", result);

}

}

通过lambda表达式来实现:

static int TakesAWhile(int data, int ms)

{

Console.WriteLine("TakesAWhile started");

Thread.Sleep(ms);

Console.WriteLine("TakesAWhile completed");

return ++data;

}

public delegate int TakesAWhileDelegate(int data, int ms);

static void Main(string[] args)

{

TakesAWhileDelegate d1 = TakesAWhile;

d1.BeginInvoke(1, 3000,

ar =>

{

int result = d1.EndInvoke(ar);

Console.WriteLine("result: {0}", result);

},

null);

for (int i = 0; i < 100; i++)

{

Console.Write(".");

Thread.Sleep(50);

}

Console.ReadLine();

}

var completed = new AutoResetEvent(false);

var args = new SocketAsyncEventArgs();

args.RemoteEndPoint = endpoint;

args.Completed += OnConnectCompleted;

args.UserToken = completed;

socket.ConnectAsync(args);

if (!completed.WaitOne(timeout) || !socket.Connected)

{

using (socket)

{

throw new TimeoutException("Could not connect to " + endpoint);

}

}

时间: 2024-11-05 13:45:20

C#中关于异步的三种写法的相关文章

横冲直撞vue(第三篇):vue中template的三种写法、v-bind、v-on、更新元素的指令v-text与v-html、条件渲染指令v-if 与v-show、v-for

一.vue中template的三种写法 第一种(字符串模板写法): 直接写在vue构造器里,这种写法比较直观,适用于html代码不多的场景,但是如果模板里html代码太多,不便于维护,不建议这么写. <body> <div id="app"></div> <script src="./lib/vue.js"></script> <script type="text/javascript&qu

vue中template的三种写法

第一种(使用模板字符串)早期字符串拼接年代 <div id="app"></div> new Vue({ el: "#app", template: '<div> <h1>{{message}}</h1> <div>', data: { message: '字符串拼接' } }) 第二种(使用script元素)HTML5标准之前的写法 <div id="app">

vue实例中中data属性三种写法

<script type="text/javascript"> var app=new Vue({ el:'#app', data:{ book: "vue.js" } })</script> <script type="text/javascript">var app=new Vue({el:'#app',data:function(){book: "vue.js"}})</scri

js中斐波拉切数的三种写法;

js中斐波拉切数的三种写法: function factorial(num){ if(num <=1){ return 1; }else{ return num* factorial(num-1); } } console.log(factorial(5));//120 面这个函数的执行与函数名紧紧耦合在了一起,可以使用arguments.callee可以消除函数解耦 第二种(在严格模式下,访问这个属性会抛出TypeError错误) function factorial(num){ if(num

jquery 在页面中三种写法

jQuery 分 2 个系列版本 1.x 与 2.x,主要的区别在于 2.x 不再兼容 IE6.7.8浏览器,这样做的目的是为了兼容移动端开发.由于减少了一些代码,使得该版本比 jQuery 1.x 更小.更快.如果开发者比较在意老版本 IE 用户,只能使用 jQuery 1.9 及之前的版本了.jQuery是一个JavaScript脚本库,不需要特别的安装,只需要我们在页面 <head> 标签内中,通过 script 标签引入 jQuery 库即可. 1 <script type=&q

js中回调函数的三种写法

回调函数的三种写法: 1.通过指针来调用 2.通过匿名函数来调用 3.定义与执行同时进行 // 通过指针来调用 function math(num1,num2,callback){ return callback(num1 , num2); } function aa(num1,num2){ return num1 + num2; } function bb(num1,num2){ return num1 - num2; } console.log( math(2,1,aa) ); // 3 c

HDU Today(三种写法)(最短路)

Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市?浦镇陶姚村买了个房子,开始安度晚年了. 这样住了一段时间,徐总对当地的交通还是不太了解.有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格). 徐总经常会问蹩脚的英文问路:"Can you h

总结 React 组件的三种写法 及最佳实践

React 专注于 view 层,组件化则是 React 的基础,也是其核心理念之一,一个完整的应用将由一个个独立的组件拼装而成. 截至目前 React 已经更新到 v15.4.2,由于 ES6 的普及和不同业务场景的影响,我们会发现目前主要有三种创建 React 组件的写法:1. ES5写法React.createClass,2. ES6写法React.Component,3. 无状态的函数式写法(纯组件-SFC). 你们最钟爱哪种写法呢?萝卜青菜各有所爱~ 每个团队都有自己的代码规范和开发模

Android中常用的三种存储方法浅析

Android中常用的三种存储方法浅析 Android中数据存储有5种方式: [1]使用SharedPreferences存储数据 [2]文件存储数据 [3]SQLite数据库存储数据 [4]使用ContentProvider存储数据 [5]网络存储数据 在这里我只总结了三种我用到过的或即将可能用到的三种存储方法. 一.使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置信息比如窗口状态,它的本质是基