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