C# 异步操作客户端
通过阅读博客园各位大牛的文章,我对异步操作客户端做了一个总结!
1.什么是异步方法?什么是同步方法?
异步方法指当程序执行异步操作时,不会等待异步回调的函数执行完成,而是直接往下与异步的函数同时执行,同步方法则相反,必须等待函数执行完成后,才能向下执行。
2.异步的接口介绍
public interface IAsyncResult
{
// 获取用户定义的对象,它限定或包含关于异步操作的信息。
// 通常在调用BeginXXXX方法时传入对象,供回调方法时恢复之前的状态。
object AsyncState { get; }
// 获取用于等待异步操作完成的 System.Threading.WaitHandle。
// 我们可以调用它的WaitOne()方法等待调用完成。
WaitHandle AsyncWaitHandle { get; }
// 获取异步操作是否同步完成的指示。
// 如果异步操作同步完成,则为 true;否则为 false。
bool CompletedSynchronously { get; }
// 获取异步操作是否已完成的指示。
// 如果操作完成则为 true,否则为 false。
bool IsCompleted { get; }
}
3.使用委托进行异步操作
3.1 BeginInvoke和EndInvoke方法
BeginInvoke方法用于启动异步的调用,他后面所跟的参数为回调函数的参数+回调函数的方法名+AsyncState
给我感觉AsyncState这个参数没怎么用到,一个传空值就可以了。
BeginInvoke 返回 IasyncResult,可用于监视调用进度。
EndInvoke用于异步的检索结果,如果回调函数没执行完成,它会一直阻塞,直接到回调函数调用完成。
BeinInvoke与EndInvoke一般一起使用如图
public delegate void AsyncEventHandler(int count);//声明委托,count为回调函数所传入的参数
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
AsyncEventHandler aa = new AsyncEventHandler(asyncff);
IAsyncResult ia=aa.BeginInvoke(4000,null,null);//异步操作开始
tbff();//同步方法
aa.EndInvoke(ia);//异步完成。
}
public void asyncff(int count)
{
Response.Write("<script>alert('异步方法开始')</script>");
Thread.Sleep(count);
Response.Write("<script>alert('异步方法结束')</script>");
}
public void tbff()
{
Response.Write("<script>alert('同步方法开始')</script>");
Thread.Sleep(4000);
Response.Write("<script>alert('同步方法结束')</script>");
}

浙公网安备 33010602011771号