Exercise - TPL - Async/Await

Ihr Pate hat Sie gebeten für ihn eine Programm zur Simulation von Banküberfälle zu schreiben.

  • Während eines Heists müssen mehrere Aufgaben durchgeführt werden.
  • Jede Aufgabe (EnterBank, HireCrew, ..) soll in einem eigenem Task ausgeführt werden.
  • Manche der Aufgaben können dabei gleichzeitig, andere hingegen müssen sequentiell durchgeführt werden.
  • Reihenfolge der Tasks:
    1. Schritt: HIRE_CREW, GET_BANK_PLAN, BRIBE_BANK_EMPLOYEE, BUY_GETAWAY_CAR
    2. Schritt: ENTER_BANK
    3. Schritt: ROB_COUNTER_1, ROB_COUNTER_2, ROB_COUNTER_3
    4. Schritt: LEAVE_BANK
    5. Schritt: LOSE_POLICE

Hinweis: Um auf die Fertigstellung von mehreren Tasks zu warten, kannst du die Methode WhenAll verwenden:

await Task.WhenAll(
	DoSthAsync(),
	DoSthElseAsync()
);
public class Heist {
	/*  
	* Implementieren Sie die EvaluateHeistAsync
	* Methode  
	*/  
	public async Task EvaluateHeistAsync()  
	{  
		// 1. Protokollieren Sie wielange ein Heist dauert  
		
		// 2. Protokollieren Sie in welcher Abfolge die Tasks ausgeführt werden.
	}
	
	private async Task BribeBankEmployee()  
	{  
		await Task.Delay(300);  
		Console.WriteLine(ELog.BRIBE_BANK_EMPLOYEE.ToString());  
	}  
	  
	private async Task BuyGetawayCar() {  
		await Task.Delay(200);  
		Console.WriteLine(ELog.BUY_GETAWAY_CAR.ToString());  
	}  
	  
	private async Task GetBankPlans() {  
		await Task.Delay(200);  
		Console.WriteLine(ELog.GET_BANK_PLAN.ToString());  
	}  
	  
	private async Task HireCrew() {  
		await Task.Delay(400);  
		Console.WriteLine(ELog.HIRE_CREW.ToString());  
	}  
	  
	private async Task EnterBank() {  
		await Task.Delay(100);  
		Console.WriteLine(ELog.ENTER_BANK.ToString());  
	}  
	  
	private async Task RobCounter1() {  
		await Task.Delay(300);  
		Console.WriteLine(ELog.ROB_COUNTER_1.ToString());  
	}  
	  
	private async Task RobCounter2() {  
		await Task.Delay(300);  
		Console.WriteLine(ELog.ROB_COUNTER_2.ToString());  
	}  
	  
	private async Task RobCounter3() {  
		await Task.Delay(300);  
		Console.WriteLine(ELog.ROB_COUNTER_3.ToString());  
	}  
	  
	private async Task LeaveBank() {  
		await Task.Delay(120);  
		Console.WriteLine(ELog.LEAVE_BANK.ToString());  
	}  
	  
	private async Task LosePolice() {  
		await Task.Delay(300);  
		Console.WriteLine(ELog.LOSE_POLICE.ToString());  
	}
}
 
public enum ELog {  
    BRIBE_BANK_EMPLOYEE,  
    BUY_GETAWAY_CAR,  
    GET_BANK_PLAN,  
    HIRE_CREW,  
    ENTER_BANK,  
    ROB_COUNTER_1,  
    ROB_COUNTER_2,  
    ROB_COUNTER_3,  
    LEAVE_BANK,  
    LOSE_POLICE  
}
 
public class Program
{
	public static async Task Main(string[] args) 
	{
		await new Heist().EvaluateHeistAsync();
	}
}