zoukankan      html  css  js  c++  java
  • Deledate同步异步研究

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    
    namespace LearnDelegate
    {
        class Program
        {
            public static void Main(string[] args)
            {
                SyncDel del = Calulate;
                int x = 10;
                int y = 10;
                del.Invoke(x, y);
                CalOK();
    
                AsyncDel1 del1 = Calulate;
                del1.BeginInvoke(x, y, AsynCalOK, null);
    
                AsyncDel2 del2 = ReturnCalulate;
                var AsynResult = del2.BeginInvoke(x, y, AsynCalOK, null);
                int result = del2.EndInvoke(AsynResult);
    
                Console.WriteLine("主线程运行完成");
    
            }
            public static void Calulate(int x, int y)
            {
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "计算:" + (x + y));
            }
            public static int ReturnCalulate(int x, int y)
            {
    
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "计算" + (x + y));
                return x + y;
            }
            public static void CalOK()
            {
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "计算完成");
            }
            public static void AsynCalOK(IAsyncResult result)
            {
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "计算完成");
            }
            public delegate void SyncDel(int x, int y);
            public delegate void AsyncDel1(int x, int y);
            public delegate int AsyncDel2(int x, int y);
        }
    }
    

    执行结果

    SynDel是同步委托,AsynDel1和AsynDel2为异步委托。

    何时使用委托。(自我理解)

    简单来讲当你需要处理一件事,但不知道该给谁的时候,这时我们需要使用委托。简单来讲就是这个方法可以被多个不同类型的方法调用的时候。我们需要使用委托。

    委托和接口的区别。(自我理解)

    委托在乎事件的完成结果,不在乎过程,也就是不需要调用方法中的属性,而接口更多的在乎在完成过程中,方法的存在很多类似的属性成员及完成方法存在很多相似步骤,考虑接口

    何时使用同步和异步

    不建议多开一个线程异步调用,当委托给的方法和现有的程序耦合性很低,且执行较为复杂。负荷很大。可以考虑异步调用。

  • 相关阅读:
    DM数据库disql的使用 Disql disql 达梦数据库Disql
    移动端禁止蒙层下的页面滚动
    移动端如何自动适配px
    使用Vant做移动端对图片预览ImagePreview和List的理解
    uniapp中使用uView组件库
    h5使用vuephotopreview 做全屏预览
    jsonview的实现
    PC端自适应使用rem 移动端适配升级版
    axios解决跨域问题(vuecli3.0)
    vs code 配置git path
  • 原文地址:https://www.cnblogs.com/shikyoh/p/2397641.html
Copyright © 2011-2022 走看看