`
ikeycn
  • 浏览: 146228 次
  • 性别: 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)

    在异步编程中,委托允许我们使用BeginInvoke和EndInvoke方法启动异步调用。下面我们将深入探讨这两个方法以及如何使用委托实现异步操作。 1. **声明委托** 首先,我们需要定义一个委托类型,这将描述我们打算异步...

    委托异步调用的简单例子(一看就明白,你懂的)

    总结起来,委托异步调用是.NET中实现非阻塞操作的重要手段,它包括创建委托实例、使用`BeginInvoke`启动异步操作以及定义回调方法处理完成后的逻辑。随着语言的发展,`Task`类和`async/await`关键字提供了更现代、...

    Delegate方式的异步线程程学习Dome

    1. BeginInvoke与EndInvoke:这是Delegate异步调用的基础。BeginInvoke方法启动一个异步操作,它不会等待操作完成就立即返回,而是立即返回一个IAsyncResult对象,可以用于后续跟踪操作状态。EndInvoke方法则用于在...

    C#异步调用的好处和方法.pdf

    在.NET框架中,异步调用主要通过`BeginInvoke`和`EndInvoke`方法配合使用来实现。此外,还可以通过异步回调函数进一步优化异步操作的管理。 ##### 开始异步调用 - **创建委托**:首先需要定义一个委托,用于封装要...

    通过委托和异步调用实现窗体间的通讯

    本文将深入探讨如何利用C#中的委托和异步调用来实现这种通讯。 首先,我们需要理解什么是委托。在C#中,委托类似于函数指针,它允许我们将方法作为参数传递,或者存储一个或多个方法以便稍后调用。委托是类型安全的...

    Windows Mobile 异步调用方式

    以下是使用委托和事件实现异步调用的基本步骤: - **定义委托类型:** 首先,创建一个自定义委托,表示你想要执行的异步操作的返回类型和参数。 ```csharp public delegate void AsyncDelegate(object sender, ...

    vb.net多线程通过Deletgrate委托调用传递参数.rar

    在VB.NET编程中,多线程处理是提升应用程序...总之,通过委托在VB.NET中进行多线程编程,我们可以灵活地传递参数,实现异步操作,提升程序效率。理解并掌握委托调用和多线程传递参数是每个VB.NET开发者必备的技能之一。

    异步多线程调用IAsyncResult

    `BeginInvoke`是.NET中委托类型(Delegate)提供的一个方法,用于启动一个异步调用。当你想要在一个方法中使用多线程并且不希望阻塞当前线程时,可以使用`BeginInvoke`。这个方法接受一个或多个参数,以及一个可选的...

    VB.NET使用多线程

    最常用的是`Thread`类,但在这里,由于描述中提到使用了Delegate来传递参数,我们将重点讨论如何通过委托实现多线程。 委托在.NET中是一种类型安全的回调机制,它允许我们存储方法的引用并稍后调用。在多线程环境中...

    控件异步调用的Control.BeginInvoke实例解析源码

    虽然`BeginInvoke`提供了异步调用的能力,但如果频繁使用,可能会增加UI线程的负担,影响性能。因此,应该合理控制异步调用的频率,避免不必要的UI更新。 7. **多层嵌套的异步调用** 如果一个异步调用中又包含了...

    .net版本简单线程调用源码_70.rar

    .NET框架中的线程调用是多任务编程的关键技术,它允许程序在单个进程中同时执行多个操作。在C#编程中,线程的使用能够提高应用程序的效率和响应性,尤其是在处理耗时任务或者需要并发执行的任务时。本文将深入探讨...

    委托的异步调用 beginInvoke

    `BeginInvoke`是`Control`类的一个方法,用于启动一个异步调用,将指定的委托及其参数在控件的创建线程上执行。这在处理后台线程与用户界面交互时非常有用,因为只有UI线程可以修改UI元素。在Winform应用中,如果你...

    委托异步调用

    在C#中,结合委托和异步调用,我们可以实现非阻塞操作,从而优化应用程序性能。 **1. 委托的理解与使用** 委托可以视为一种引用类型,它封装了指向特定方法的引用。定义委托的语法如下: ```csharp public ...

    使用IAsyncResult 对象的异步操作与使用事件的异步操作

    ### 使用 IAsyncResult ...总的来说,无论是使用`IAsyncResult`还是事件来实现异步操作,其核心都是将长时间运行的任务放在非UI线程中执行,从而提高应用程序的响应性。选择哪种方式取决于具体的应用场景和个人偏好。

    C# 异步编程 AsyncCallback委托

    在 .NET 框架中,异步编程可以通过使用 AsyncCallback 委托和 IAsyncResult 接口来实现。AsyncCallback 委托是一个特殊的委托,它可以在异步方法调用完成时被调用。IAsyncResult 接口则提供了异步方法的状态信息。 ...

    .NET笔记之:Delegate内部原理的分析

    无论是将委托用作参数传递、实现多播功能,还是与异步编程结合使用,委托都是.NET平台中不可或缺的一部分。通过深入研究和实践,开发者可以充分利用.NET框架提供的委托功能,从而提升软件的性能和可维护性。

Global site tag (gtag.js) - Google Analytics