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>");
}




posted @ 2014-07-18 16:27  battle  阅读(112)  评论(0)    收藏  举报