Task.ContinueWith BeginInvoke 未按预期工作

Task.ContinueWith with BeginInvoke not working as expected

考虑以下代码:

Task task1;
Task task2;
private void button1_Click(object sender, EventArgs e)
{
    task1 = Task.Run(() =>
    {
        for (int i = 0; i < 100000; i++)
        {
            BeginInvoke(new Action<int>((int n) =>
            {
                listView1.Items.Add(n.ToString());
            }), i);
        }
    });            
    task2 = task1.ContinueWith(t =>
    {
        MessageBox.Show("Why isn't this reached");
    }, TaskScheduler.FromCurrentSynchronizationContext());
}

private void button2_Click(object sender, EventArgs e)
{
    MessageBox.Show(String.Format("task1 status:{0}\r\ntask2 status:{1}", task1.Status, task2.Status));
}

如果我 运行 在 Windows 8, .NET Framework 4.5.2 上执行此操作,单击按钮 2 时会得到以下输出:

task1 status:RanToCompletion

task2 status:WaitingToRun

即使我使用了 ContinueWith,这怎么可能?

我知道 BeginInvoke 只是让委托排队执行,如果我使用 Invoke 它工作得很好。这是错误还是干扰了 BeginInvoke?有任何想法吗?提前致谢。

我没有主要来源,但 this post 声明消息队列有 10,000 条记录的限制(Hans Passant 是本网站上 windows 表格最专家之一所以我相信他的话,即存在限制)。

因为您将 100,000 条记录放在那里,所以它要么将您的 ContinueWith 推离堆栈,要么一开始就没有添加到那里(我不确定是哪个)