IHttpHandler的异步接口是IHttpAsyncHandler
使用示例:
public class Handler1 : IHttpAsyncHandler { byte[] buffer = new byte[1024]; FileStream fs; public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) { fs = new FileStream(@"c:/txt.txt", FileMode.Open, FileAccess.Read); return fs.BeginRead(buffer, 0, buffer.Length, cb,context); } public void EndProcessRequest(IAsyncResult result) { int len = fs.EndRead(result); string str = Encoding.UTF8.GetString(buffer, 0, len); HttpContext context = result.AsyncState as HttpContext; using (StreamReader sr=new StreamReader(context.Request.InputStream)) { str += sr.ReadToEnd(); } context.Response.Write(str); } public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { throw new NotImplementedException(); } }
WebClient的异步使用:
private void DoWebClient() { WebClient webClient = new WebClient(); //webClient.OpenReadAsync(new Uri("http://localhost:13701/Handler1.ashx"));//在不阻止调用线程的情况下,从资源返回数据 //webClient.OpenReadCompleted += new OpenReadCompletedEventHandler((o, e) => { // using (StreamReader reader = new StreamReader(e.Result)) // { // string contents = reader.ReadToEnd(); // Trace.Write(contents); // } //});//异步操作完成时发生 webClient.UploadDataAsync(new Uri("http://localhost:13701/Handler1.ashx"), "POST", Encoding.UTF8.GetBytes(":majiang")); webClient.UploadDataCompleted += new UploadDataCompletedEventHandler((o, e) => { string contents = Encoding.UTF8.GetString(e.Result); Trace.Write(contents); }); }
HttpWebRequest的异步使用
private void DoHttpWebRequest() { string url = "http://localhost:13701/Handler1.ashx"; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);//创建WebRequest类 request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.BeginGetRequestStream(RequestProcess, request); } void RequestProcess(IAsyncResult asyncResult) { HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest; using (Stream stream = request.EndGetRequestStream(asyncResult)) using (StreamWriter sw = new StreamWriter(stream)) { sw.Write(":Majiang"); } request.BeginGetResponse(ResponseProcess, request); } void ResponseProcess(IAsyncResult asyncResult) { HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest; HttpWebResponse response = request.EndGetResponse(asyncResult) as HttpWebResponse; using (Stream stream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(stream)) { string contents = reader.ReadToEnd(); Trace.Write(contents); } }