最近在应用中,需要实现一个异步调用,由于刚接触.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方法的参数列表中,前三个是和自己定义的方法中的参数列表一致的,最后两个是和异步完成后的回调相关的,根据需要自行设置。
分享到:
相关推荐
NET异步调用模式.txt TreeView更新线程.txt url.txt VB.NET多线程——创建新线程.txt VB.NET多线程——高级同步技术.txt VB.NET多线程——线程池.txt Visual C#多线程参数传递浅析.txt WebBrowser控件-弹出新窗体和...
使用.Net 的委托机制来为我们的程序提供异步操作行为. 1步, 为我们的AsyncTest(Hello方法) 声明一个委托 public delegate string AsyncEventHandler(string name); 2步,使用委托提供的BeginInvoke, EndInvoke 方法...
本ppt结合场景和实例对C#委托(delegate)的基础进行了讲解:包括了委托的定义,基本语法,同步异步调用,匿名委托的使用,泛型委托,lamda表达式,剖析了委托协变、委托逆变。对委托在.net 3.5框架中的身影进行了分析...
体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0使用Web Part创建应用程序之二...
C#多线程不阻塞 在这篇文章中,我们将探讨C#中的多线程不阻塞编程。...我们也探讨了同步方法调用和异步方法调用的区别,以及如何使用BeginInvoke()方法异步调用函数。最后,我们讨论了线程池和线程池饥饿的问题。
.Net使用从线程池中得到的线程来执行通过BeginInvoke()分配的方法,当异步方法执行完成时,工作线程调用回调方法而不只直接回到线程池中,要实现回调方法,我们必须在使用beginInvoke()方法的时候指定一个参数为...
WaitOne方法将一直等待,直到异步调用完成,并发出通知 * ************************************************************/ /* private delegate int NewTaskDelegate(int ms); private static int new...
详解 C# 委托、事件与回调函数 委托是 C# 中一种非常重要的概念,它可以将方法作为...在 C# 中,回调函数可以使用委托来实现。 委托、事件和回调函数是 C# 中三个非常重要的概念,它们在编程中扮演着非常重要的角色。
在我 2004年1月 的专栏里,我讨论了如何利用委托(Delegate)实现异步执行一个方法。当时,我展示了如何在一个 Windows Form 应用内部通过调用一个委托对象的 BeginInvoke()方法来实现一个异步的方法调用。你也许还...
新增了关于如何部署包含内嵌依赖程序集的单一文件的一节,以及比较反射调用、bind/invode、bind/create、delegate/invoke、C#动态类型的一节。 Chapter 24-Runtime Serialization 全新的一章。 Part V – ...
xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。 ## xLua的突破 xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是: * 可以运行时把...