【问题标题】:Asynchronous delegates - are the parameters always marshalled?异步委托 - 参数是否总是编组的?
【发布时间】:2010-10-22 14:17:05
【问题描述】:

如果参数是对对象的引用,异步调用将传递引用还是对象的副本(通过编组)?

【问题讨论】:

    标签: c# asynchronous delegates


    【解决方案1】:

    如果参数是对对象的引用(即引用类型),那么传递给方法的就是引用。但是,使用 ref 关键字传递的值类型并非如此。本文有相关示例(图13和14):http://msdn.microsoft.com/en-us/magazine/cc301332.aspx

    编组与应用程序域之外的通信有关,因此它与异步调用的委托本身无关。

    【讨论】:

      【解决方案2】:

      据我所知,仅通过异步调用委托就不会发生对象编组。下面是一些代码来显示异步委托调用,传递一个对象引用。

      public class Car
      {
          public string Model { get; set; }
      }
      
      public delegate void TransformHandler(Car car);
      
      public static void Transform(Car car)
      {
          car.Model = "Holden";
      }
      
      static void Main(string[] args)
      {
          Car car = new Car();
          car.Model = "Ford";
      
          new TransformHandler(Transform).BeginInvoke(car, null, null);
      
          Thread.Sleep(100);
      
          Console.WriteLine(car.Model); // Prints "Holden", so it wasn't marshalled
      }
      

      【讨论】:

        【解决方案3】:

        为什么不自己编写一个小示例来看看呢?

        (我相信“参考”就是答案。)

        【讨论】:

          猜你喜欢
          • 2018-08-16
          • 2017-06-23
          • 1970-01-01
          • 2010-11-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-04
          相关资源
          最近更新 更多