AsyncCallback 传递参数

AsyncCallback pass parameter

我想在函数 LoadHistoryAsync(List<int> Items) 中将 List<items> 传递给 AsyncCallbackCallForNewData(IAsyncResult result) 中的 result.AsyncState 为空,为什么?

namespace ConsoleApplication3
{
class Program
{
    static void Main(string[] args)
    {
        List<int> Items = new List<int>();
        Data D = new Data();
        D.LoadHistoryAsync(Items);
        //D.LoadNewPointsAsync(Items);
        Console.ReadKey();
    }
}
public class Data
{
    public void LoadHistoryAsync(List<int> Items)
    {
        Action<List<int>> GetHistoryInformation = new Action<List<int>>(GetHistory);
        //IAsyncResult History = GetHistoryInformation.BeginInvoke(Items, null, null);
        IAsyncResult History = GetHistoryInformation.BeginInvoke(Items, new AsyncCallback(CallForNewData), null);
    }

    public void GetHistory(List<int> Items)
    {
        Random rnd = new Random();
        System.Threading.Thread.Sleep(rnd.Next(1,5000));
        Items.Add(1);
        Console.WriteLine("HistoryLoaded");
    }
    public void CallForNewData(IAsyncResult result)
    {
       Console.WriteLine("Result: {0}",result.AsyncState);
    }

    public void LoadNewPointsAsync(List<int> Items)
    {
        //while(!History.IsCompleted)
        //{
            System.Threading.Thread.Sleep(100);
        //}
        Action<List<int>> GetPointsInformation = new Action<List<int>>(GetPoints);
        IAsyncResult NewPoints = GetPointsInformation.BeginInvoke(Items, null, null);
    }

    public void GetPoints(List<int> Items)
    {
        Random rnd = new Random();
        System.Threading.Thread.Sleep(rnd.Next(1, 5000));
        Items.Add(2);
        Console.WriteLine("New data loaded");
    }
}
}

编辑:

IAsyncResult History = GetHistoryInformation.BeginInvoke(Items, new AsyncCallback(CallForNewData), Items);

问题已解决。

来自documentation

The BeginInvoke method initiates the asynchronous call. It has the same parameters as the method that you want to execute asynchronously, plus two additional optional parameters. The first parameter is an AsyncCallback delegate that references a method to be called when the asynchronous call completes. The second parameter is a user-defined object that passes information into the callback method.

你传递了一个null,你得到了一个null