2017-06-07 42 views
1

我有有再次呼籲其他兩個靜態類方法如何創建靜態類的簡單的回調在C#

基本上在第一靜態類,我想知道,一旦操作的方法的靜態類在其他兩個靜態類

public static class FirstClass{ 

    public static async System.Threading.Tasks.Task FirstClassMethod() 
     { 
      SecondClass. SecondClassMethod(); 
      ThirdClass. ThirdClassMethod(); 
     } 
} 

public static class SecondClass{ 

    public static async System.Threading.Tasks.Task SecondClassMethod() 
     { 

     } 
} 

public static class ThirdClass{ 

    public static async System.Threading.Tasks.Task ThirdClassMethod() 
     { 

     } 
} 

解決我的問題的任何幫助下完成的,將不勝感激非常

+1

是否有一個特殊的原因,您爲什麼不等待這兩種方法? –

回答

2

使用Task.WhenAll,您可以創建一個包裝幾個任務,當所有包裹任務完成完成單個任務。

public static class FirstClass{ 

    public static async System.Threading.Tasks.Task FirstClassMethod() 
     { 
      return await Task.WhenAll(
       SecondClass.SecondClassMethod(), 
       ThirdClass.ThirdClassMethod() 
      ); 
     } 
} 

public static class SecondClass{ 

    public static async System.Threading.Tasks.Task SecondClassMethod() 
     { 

     } 
} 

public static class ThirdClass{ 

    public static async System.Threading.Tasks.Task ThirdClassMethod() 
     { 

     } 
} 
1

隨着await關鍵字的等待,直到Task完成。

using System.Threading.Tasks; 

public static async Task FirstClassMethod() 
{ 
    await SecondClass. SecondClassMethod(); 
    await ThirdClass. ThirdClassMethod(); 
    ... 
} 

BTW:

你應該考慮不使用等待只有當你確定你不想等待異步調用完成和被調用的方法不會提高任何例外。

+0

如果我不使用await來調用異步任務,它是否會拋出任何錯誤...糾正我如果我錯了 –

+0

如果我不使用await,那麼ThirdClassMethod可以在SecondClassMethod結束之前繼續執行 –

+0

@RajanM Even如果你不使用await它可以拋出一個異常,但如果你想捕捉它,你需要做這樣的事情'task.ContinueWith(t => HandleError(t.Exception), TaskContinuationOptions.OnlyOnFaulted);.'。如果你使用等待,你可以正常地捕捉它。 – NtFreX

相關問題