请问,这个异步执行的代码
时间:2011-12-17
来源:互联网
class Program
{
public delegate void takedelegate(int ms);
public static void takeMethod(int ms)
{
Thread.Sleep(ms);
}
static void Main(string[] args)
{
takedelegate dl = takeMethod;
IAsyncResult ar = dl.BeginInvoke(3000, takecompleted, "我爱熊俊" );
Console.WriteLine("开始执行");
for (int i = 0; i < 100; i++)
{
Console.Write(".");
Thread.Sleep(50);
if (ar.IsCompleted) // IsCompleted属性判断异步操作是否完成
{
Console.WriteLine("执行完毕 ");
break;
}
}
Console.Read();
}
static void takecompleted(IAsyncResult ar)
{
string s = ar.AsyncState.ToString();
Console.Write(s);
}
}
我的问题,for循环中有一个判断异步执行是否完成的if判断,if (ar.IsCompleted)
我想问的是:BeginInvoke方法从开始执行,就返回了一个IAsyncResult,它就是ar,此时,ar.IsCompleted为false
然后,开始执行for循环,当异步执行完之后,也会返回一个IAsyncResult,此时它的IsCompleted属性为true,不过,for循环里面的IsCompleted应该始终是false吧,为ture,是怎么传进去的呢?
{
public delegate void takedelegate(int ms);
public static void takeMethod(int ms)
{
Thread.Sleep(ms);
}
static void Main(string[] args)
{
takedelegate dl = takeMethod;
IAsyncResult ar = dl.BeginInvoke(3000, takecompleted, "我爱熊俊" );
Console.WriteLine("开始执行");
for (int i = 0; i < 100; i++)
{
Console.Write(".");
Thread.Sleep(50);
if (ar.IsCompleted) // IsCompleted属性判断异步操作是否完成
{
Console.WriteLine("执行完毕 ");
break;
}
}
Console.Read();
}
static void takecompleted(IAsyncResult ar)
{
string s = ar.AsyncState.ToString();
Console.Write(s);
}
}
我的问题,for循环中有一个判断异步执行是否完成的if判断,if (ar.IsCompleted)
我想问的是:BeginInvoke方法从开始执行,就返回了一个IAsyncResult,它就是ar,此时,ar.IsCompleted为false
然后,开始执行for循环,当异步执行完之后,也会返回一个IAsyncResult,此时它的IsCompleted属性为true,不过,for循环里面的IsCompleted应该始终是false吧,为ture,是怎么传进去的呢?
作者: drbrdvgrd43 发布时间: 2011-12-17
真正的异步编程,就不会用什么循环、线程阻塞了。
作者: sp1234 发布时间: 2011-12-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28