首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

.net施用delegate实现异步调用

2012-12-22 
.net使用delegate实现异步调用最近在应用中,需要实现一个异步调用,由于刚接触.net不深,还是费了不少劲的,

.net使用delegate实现异步调用
最近在应用中,需要实现一个异步调用,由于刚接触.net不深,还是费了不少劲的,不过最后总算也能用了。下面是代码,记录下来,以备以后使用。
实现异步调用大致需要三步:
1、定义实现自身功能的方法,该方法中应该是实现一个完整的需要被异步实现的功能,如下:

private void SyncSoldTradesTop2Local(string session, string nick, int totalSize)        {            int totalpagesize = 0;            if (totalSize % MAX_TRADE_PAGE_SIZE == 0)            {                totalpagesize = totalSize / MAX_TRADE_PAGE_SIZE;            }            else            {                totalpagesize = totalSize / MAX_TRADE_PAGE_SIZE + 1;            }            TradesSoldGetRequest req = new TradesSoldGetRequest();            req.Fields = "tid";            req.PageSize = MAX_TRADE_PAGE_SIZE;            TradesSoldGetResponse rsp;            for (var i = 1; i <= totalpagesize; i++)            {                int repeatNum = 0;                req.PageNo = i;                while (repeatNum++ < 5)     //如果失败,最多重试5次                {                    rsp = client.Execute(req, session);                    if (rsp != null && !rsp.IsError && rsp.Trades.Count > 0)                    {                        BatchAddTradeFromTop2Local(rsp.Trades, session);                        break;                    }                }            }            UpdateUserTradeSync(nick);        }

2. 定义一个与上面的方法具有相同参数列表的delegate声明,如下:
delegate void GetAllSoldTradesFromTopDelegate(string session, string nick, int totalSize);


3. 通过这两步已基本完成了异步的声明,如果需要使用,则还需要下面这一步:定义delegate对象,并调用其BeginInvoke方法,如下
new GetAllSoldTradesFromTopDelegate(SyncSoldTradesTop2Local).BeginInvoke(session, nick, totalSize, null, workerDelegate);


上面这句代码首先通过delegate对象,把步骤1中定义的方法进行包装成异步理:new GetAllSoldTradesFromTopDelegate(SyncSoldTradesTop2Local)
然后调用BeginInvoke方法就可以实现对SyncSoldTradesTop2Local的异步调用了。在BeginInvoke方法的参数列表中,前三个是和自己定义的方法中的参数列表一致的,最后两个是和异步完成后的回调相关的,根据需要自行设置。

热点排行