.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); }delegate void GetAllSoldTradesFromTopDelegate(string session, string nick, int totalSize);
new GetAllSoldTradesFromTopDelegate(SyncSoldTradesTop2Local).BeginInvoke(session, nick, totalSize, null, workerDelegate);