2015-10-07 122 views
1

我使用ExcelDNA作爲插件。我有幾個任務使用ExcelUtilAsync.Run異步運行,但是當他們完成後,我想運行一個函數來格式化他們的所有輸出以返回到excel。我嘗試使用Barrier,但它不能返回一個值(我認爲,我是c#的新手)。我如何等待/加入這些任務?如何等待ExcelUtilAsync任務?

回答

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