C#异步处理

异步是什么

异步,比如,小李让小张帮忙去打饭,这时小李不知道小张何时回来,在这段时间内小李可以做一些其他的事情,只是小张打饭回来了通知小李就ok。所以异步就是接收方不知道发送方什么时候发送,所以发送的信息中就要有提示接收方开始接收信息的。

还有一种是针对多线程而言,在多线程中有同步和异步之分,如果使用同步表示这些线程可能存在资源竞争的情况(比如生产者消费者问题)。如果不存在资源竞争的情况那么就可以使用异步处理的形式,当异步线程调用完毕的时候通知主线程。

异步和多线程的区别

这个经常搞混了,因为在平时编写程序的时候,只要使用多线程不采用同步机制,那么都可以理解成为是异步的处理。

但是今天我们还是要弄清楚他们之间的区别。异步编程中开发者不用操心线程,代码中不会出现线程语句。因为,采用异步的时候,.NET已经自动创建了异步线程了,不用人为的再去创建线程了。(PS:创建线程,线程调度,优化系统线程池这些事情都由系统自己处理。)

例如:

using System;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DDD aaa = new DDD();
            ((Action)aaa.ccc).BeginInvoke(null, null);
            Console.WriteLine("干完了吗?");
            Console.ReadKey();
        }
    }
    public class DDD
    {
        public void ccc()
        {
            Console.WriteLine("刚刚干完。");
        }
    }
}

总之:多线程是一种技术,而异步就是用多线程来实现的。

如何实现一个异步调用

使用异步Ping其他机器

Ping ping = new Ping();

ping.SendAsync(IPAddress,Int32,Object) //尝试异步方式向指定的IPAddress的计算机发送Internet控制消息协议(ICMP)会送消息,并从该计算机接收相应的ICMP会送答复消息。

使用异步访问web页面

void Execute()
{

//构建HttpWebRequest对象

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(item.Config);

request.Timeout = int.Parse(ConfigurationManager.AppSettings["WebTimeOut"]);

//构建WebRequestItem对象,将监控对象与HttpWebRequest包含在其中

WebRequestItem webItem = new WebRequestItem { Item = item, httpRequest = request }; //这个WebRequestItem 对象自己构件。

//异步访问页面

IAsyncResult result = request.BeginGetResponse(new AsyncCallback(IGetResponse), webItem); //异步访问,并将webItem参数传递给异步回调函数IGetResponse(IAsyncResult)

}
void IGetResponse(IAsyncResult result)
    {

//获取传入的WebRequestItem对象

WebRequestItem webItem = (WebRequestItem)result.AsyncState;

//获取WebRequestItem对象中的HttpWebRequest请求

HttpWebRequest request = webItem.httpRequest;

//异步访问页面

        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);

if (response.StatusCode == HttpStatusCode.OK)  //能够成功访问

{

//TODO:

}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scalzdp

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值