如何等待ExcelUtilAsync任务?

时间:2015-10-07 10:08:43

标签: c# excel-dna

我使用ExcelDNA作为插件。我有几个任务使用ExcelUtilAsync.Run异步运行,但是当它们全部完成时,我想运行一个函数格式化所有输出以返回到excel。我尝试使用屏障,但它无法返回值(我想,我是c#的新手)。我如何等待/加入这些任务?

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点......取决于您希望等待完成的方式/时间。

一种非常简单的方法(假设您知道将运行多少任务)将使用CountdownEvent。像这样:

// Define how many tasks will be run via ExcelAsyncUtil
var countdownEvent = new CountdownEvent(2);

ExcelAsyncUtil.Run("Task1", null, handle =>
{
    try
    {
        // Do work for Task 1
    }
    finally
    {
        countdownEvent.Signal();
    }
});

ExcelAsyncUtil.Run("Task2", null, handle =>
{
    try
    {
        // Do work for Task 2
    }
    finally
    {
        countdownEvent.Signal();
    }
});

// Wait for all of them to finish (blocking)
countdownEvent.Wait();

// All async tasks have been completed
// (...)

您还可以查看Excel-DNA中的AsyncAwaitMacro示例: https://github.com/Excel-DNA/Samples/tree/master/AsyncAwaitMacro