Skip to content

Exercise - TPL Async Await - Heist

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();
}
}