`
net_liu
  • 浏览: 233142 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

同步异步执行委托

阅读更多

C#同步执行委托

namespace SyncDelegate
{
    delegate int BinaryOp(int a, int b);
    class Program
    {
        static void Main(string[] args)
        {
            //打印出正在执行的线程ID。
            Console.WriteLine("Main() Invoke:" + Thread.CurrentThread.ManagedThreadId);
            Console.Write("请输入i值:");
            int i = int.Parse(Console.ReadLine());
            Console.Write("请输入j值:");
            int j = int.Parse(Console.ReadLine());
            
            //调用地址()以同步的方式。
            BinaryOp b = new BinaryOp(Add);

            //也可以写b.Invoke(10, 10);
            int num=  b(i,j);

            Console.WriteLine(i + "+" + j + "=" +num);
            Console.ReadKey();
        }

        static int Add(int a, int b)
        {
            Console.WriteLine("Add() Invoke:" + Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(500);
            return a + b;
        }
    }
}

 

 

C#异步执行委托

namespace AsyncDelegate
{
    public delegate int BinaryOp(int a ,int b);
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Main()Invoke:"+Thread.CurrentThread.ManagedThreadId);
            BinaryOp bin = new BinaryOp(Add);
            //BeginInvoke 异步调用委托
            IAsyncResult Iasync = bin.BeginInvoke(4,5,new AsyncCallback(AddComplete),"Main()感谢你提供这些参数!");
           
            //担任其他工作是在这里
            Console.ReadLine();
        }

        //异步调用委托之后会执行下面过程,可以取出异步调用委托返回值
        public static void AddComplete(IAsyncResult result)
        {
            Console.WriteLine("AddComplete()Invoke:"+Thread.CurrentThread.ManagedThreadId);
            //现在得到的结果。
            AsyncResult ar = (AsyncResult)result;
            BinaryOp b = (BinaryOp)ar.AsyncDelegate;
            //用BeginInvoke 取得返回值
            int num = b.EndInvoke(result);
            Console.WriteLine("x+y="+ num);
            //信息检索的对象,它转换为字符串
            string msg = result.AsyncState.ToString();
            Console.WriteLine(msg);
        }

        //地区代表的BinaryOp目标
        public static int Add(int x,int y)
        {
            Console.WriteLine("Add() invoke:"+Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(500);
            return x + y;
        }
    }
}

 

分享到:
评论

相关推荐

    线程-异步事件委托

    在IT领域,线程和异步事件委托是编程中非常重要的概念,特别是在多任务处理和高性能应用程序设计上。本文将深入探讨这两个主题,以及如何在VB2008(Visual Basic 2008)中使用它们。 首先,让我们了解什么是线程。...

    C#同步异步操作说明

    在C#编程中,同步和异步操作是两种不同的执行方式,它们主要涉及到程序的执行流程和资源利用效率。同步方法和异步方法的核心区别在于处理任务的方式。 **同步方法**: 同步方法在调用后会阻塞主线程,直到方法执行...

    C#.net同步异步SOCKET通讯和多线程总结2[参照].pdf

    C#.net 同步异步 SOCKET 通讯和多线程总结 本文旨在总结 C#.net 中的同步异步 SOCKET 通讯和多线程编程,涵盖服务端和客户端的实现细节。 一、服务端实现 服务端使用 System.Net 和 System.Net.Sockets 命名空间...

    wpf同步与异步执行技术.docx

    总结来说,WPF的同步和异步执行技术主要依赖于Dispatcher对象,它确保了UI元素的安全访问。`Dispatcher.Invoke`和`Dispatcher.BeginInvoke`是两个核心方法,分别用于同步和异步地将任务提交给UI线程。同时,C#的委托...

    c# socket tcp 多线程 异步聊天 委托 服务 客户端

    本项目"c# socket tcp 多线程 异步聊天 委托 服务 客户端"聚焦于C#语言实现TCP协议的Socket通信,结合多线程和异步编程,以及委托的概念,构建了一个高效的聊天应用实例。以下将详细介绍这些知识点。 首先,Socket...

    TCP(委托、线程、同步、异步学习程序源码)

    本文将深入探讨TCP网络编程中的关键概念,包括委托、线程、同步和异步,这些都是构建高效、可靠的网络应用的核心要素。 首先,TCP是一种面向连接的、可靠的传输协议,它在数据交换前会先建立连接,并通过三次握手...

    WCF 同步 异步调用 实例

    本实例将深入探讨如何在WCF中实现同步和异步调用,以及如何在Winform环境下创建客户端和服务端。 ### 一、WCF同步调用 同步调用是程序执行的默认方式,它会阻塞调用线程,直到服务端返回响应。在WCF中,同步调用...

    C#socket同步异步机制

    ### C# Socket 同步与异步机制详解 #### 一、引言 在现代软件开发中,网络通信是不可或缺的一部分。特别是在客户端-服务器架构的应用中,如何高效地进行数据交换变得尤为重要。C# 提供了多种方式进行网络编程,...

    C# 异步编程 AsyncCallback委托

    C# 异步编程是指在编程过程中,使用异步方法来调用其他方法或服务,而不是使用同步方法。异步方法的优点是可以提高程序的执行效率和响应速度,因为它可以在被调用方法完成任务的同时执行其他操作。 在 .NET 框架中...

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

    首先,我们需要定义一个委托类型,这将描述我们打算异步执行的方法签名。在例子中,创建了一个名为`AsyncEventHandler`的委托,它接受一个字符串参数并返回一个字符串: ```csharp public delegate string ...

    C# Socket异步通信+事件与委托+通信程序与界面分离

    在同步通信中,程序执行会阻塞,直到通信操作完成。而异步通信则允许程序在等待通信完成的同时,继续执行其他任务,提高了程序的响应性和效率。C#的Socket类提供了BeginConnect、BeginReceive和BeginSend等方法来...

    异步委托示例

    总的来说,异步委托是.NET中进行异步编程的一个基础工具,尤其适用于需要在后台线程执行的长时间运行任务。通过合理运用,可以显著提升应用程序的性能和用户体验。"ThreadTest"这个示例提供了一个很好的起点,帮助...

    C#异步、同步解析文档

    3. **异步委托**:在示例代码中,`MathDelegate`是一个自定义的委托类型,它代表了可以异步执行的方法。通过创建委托实例并调用BeginInvoke,我们可以启动异步调用。在同步执行的示例中,主线程会等待`Add`方法完成...

    C# 委托与异步调用

    【C# 委托与异步调用】 在C#编程中,委托是一种类型安全的函数指针,它可以引用一个方法或者一组方法。而异步调用则是为了让程序在执行耗时操作时,能够不阻塞主线程,提高应用程序的响应性。尤其在执行如打开大...

    C#多线程,线程同步 异步 学习

    一旦调用了`Thread.Start()`,线程就会开始执行委托所指向的方法。`Thread`类还提供了如`Start()`来启动线程,`Sleep(int)`来使当前线程暂停指定时间,`Abort()`来尝试终止线程,`Suspend()`和`Resume()`来挂起和...

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

    BeginInvoke是非阻塞的,它允许UI线程继续处理其他任务,而Invoke则在UI线程上同步执行,确保操作不会破坏界面的线程安全。 以下是一个简单的示例: ```csharp // 定义委托 public delegate void ...

    可异步接收串口程序

    通过创建一个委托实例,你可以将一个方法(这里是接收串口数据的方法)绑定到该委托,然后在异步操作完成后,通过调用委托来执行该方法。 程序的核心部分可能包含以下几个关键步骤: 1. **初始化串口**:首先需要...

    C#同步调用,异步调用,异步回调.docx

    同步调用是指当前线程阻塞,等待方法执行完毕后继续执行,而异步调用则是将方法调用交给线程池,当前线程继续执行不阻塞。异步调用可以使用 BeginInvoke 和 EndInvoke 方法实现,但是它存在一个问题,即在等待调用...

    委托异步调用

    `Task.Run`可以将同步方法包装成一个异步任务,从而在后台线程上执行: ```csharp private async void Button_Click(object sender, EventArgs e) { long result = await Task.Run(() => LongRunningComputation()...

    c# socket同步通讯 异步通讯 客户端 服务端 实例

    异步通讯解决了同步通讯的阻塞问题,允许程序在等待数据传输的同时执行其他任务。异步通讯使用回调函数(委托)来处理完成的事件。 1. **BeginConnect/EndConnect**:客户端使用BeginConnect启动非阻塞的连接请求,...

Global site tag (gtag.js) - Google Analytics