`
ikeycn
  • 浏览: 144584 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

.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方法的参数列表中,前三个是和自己定义的方法中的参数列表一致的,最后两个是和异步完成后的回调相关的,根据需要自行设置。
分享到:
评论

相关推荐

    VB.Net-C#多线程Thread-代理委托delegate编程

    NET异步调用模式.txt TreeView更新线程.txt url.txt VB.NET多线程——创建新线程.txt VB.NET多线程——高级同步技术.txt VB.NET多线程——线程池.txt Visual C#多线程参数传递浅析.txt WebBrowser控件-弹出新窗体和...

    .Net的异步机制(委托Delegate)

    使用.Net 的委托机制来为我们的程序提供异步操作行为. 1步, 为我们的AsyncTest(Hello方法) 声明一个委托 public delegate string AsyncEventHandler(string name); 2步,使用委托提供的BeginInvoke, EndInvoke 方法...

    .Net C#委托 delegate

    本ppt结合场景和实例对C#委托(delegate)的基础进行了讲解:包括了委托的定义,基本语法,同步异步调用,匿名委托的使用,泛型委托,lamda表达式,剖析了委托协变、委托逆变。对委托在.net 3.5框架中的身影进行了分析...

    asp.net知识库

    体验.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#多线程不阻塞[参照].pdf

    C#多线程不阻塞 在这篇文章中,我们将探讨C#中的多线程不阻塞编程。...我们也探讨了同步方法调用和异步方法调用的区别,以及如何使用BeginInvoke()方法异步调用函数。最后,我们讨论了线程池和线程池饥饿的问题。

    C#异步回调算法

    .Net使用从线程池中得到的线程来执行通过BeginInvoke()分配的方法,当异步方法执行完成时,工作线程调用回调方法而不只直接回到线程池中,要实现回调方法,我们必须在使用beginInvoke()方法的时候指定一个参数为...

    异步方式访问网页.rar

    WaitOne方法将一直等待,直到异步调用完成,并发出通知 * ************************************************************/ /* private delegate int NewTaskDelegate(int ms); private static int new...

    详解C#委托,事件与回调函数

    详解 C# 委托、事件与回调函数 委托是 C# 中一种非常重要的概念,它可以将方法作为...在 C# 中,回调函数可以使用委托来实现。 委托、事件和回调函数是 C# 中三个非常重要的概念,它们在编程中扮演着非常重要的角色。

    利用辅助线程更新用户界面UI

    在我 2004年1月 的专栏里,我讨论了如何利用委托(Delegate)实现异步执行一个方法。当时,我展示了如何在一个 Windows Form 应用内部通过调用一个委托对象的 BeginInvoke()方法来实现一个异步的方法调用。你也许还...

    CLR via C# 3rd Edition

    新增了关于如何部署包含内嵌依赖程序集的单一文件的一节,以及比较反射调用、bind/invode、bind/create、delegate/invoke、C#动态类型的一节。 Chapter 24-Runtime Serialization 全新的一章。 Part V – ...

    XLua_2018最新版

    xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。 ## xLua的突破 xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是: * 可以运行时把...

Global site tag (gtag.js) - Google Analytics