异步委托 - 是否总是编组参数?

时间:2010-10-22 04:58:53

标签: c# asynchronous delegates

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

3 个答案:

答案 0 :(得分:2)

如果参数是对象的引用(意味着引用类型),那么传递给该方法的是引用。但是,使用ref关键字传递的值类型不是这种情况。本文有相关的例子(图13和14):http://msdn.microsoft.com/en-us/magazine/cc301332.aspx

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

答案 1 :(得分:0)

为什么不自己编写小样本并查看?

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

答案 2 :(得分:0)

据我所知,只是通过异步调用委托来进行对象编组。这是一些代码,用于显示异步委托调用,传递对象引用。

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
}