2016-12-10 1 views
1

Ich versuche, mich um asynchrone Programmierung in C# zu bekommen. Ich habe ein grundlegendes WPF-Programm erstellt. Dies beinhaltet eine neue Klasse CleaningService, die eine asynchrone Methode Start() hat. Das WPF-Programm verfügt über eine Schaltfläche, die die Methode Start() bei Klick aufruft.Async Programmierung in C#

Innerhalb dieser Start() Methode möchte ich eine asynchrone Method1() Methode und dann eine asynchrone Method2() Methode aufrufen. Wenn ich auf den Knopf klicke, wird Method2() nicht aufgerufen. Warum sollte das der Fall sein?

Code:

class CleaningService : ICleaningService 
{ 
    private bool _continue; 

    public async void Start() 
    { 
     this._continue = true; 

     if (!await this.Method1()) 
     { 
      this._continue = false; 
     } 

     if (!await this.Method2()) 
     { 
      this._continue = false; 
     } 
    } 

    public void Cancel() 
    { 
     this._continue = false; 
    } 

    public async Task<bool> Method1() 
    { 
     // do something 
     Console.WriteLine("Processing Method1.."); 
     return await new Task<bool>(() => true); 
    } 

    public async Task<bool> Method2() 
    { 
     if (this._continue) 
     { 
      // do something 
      Console.WriteLine("Processing Method2.."); 
      return await new Task<bool>(() => true); 
     } 
     else 
     { 
      return await new Task<bool>(() => false); 
     } 
    } 
} 
+0

Sie nie die Aufgabe Konstruktor verwenden sollten. Je. –

Antwort

3

Sie nie die Aufgabe in Method1 gestartet (Sie nur ein Task erstellt, aber es wurde nie begonnen)

+0

Ah danke. Ich denke, ich sollte etwas wie Thread.Sleep (1) machen; stattdessen. – kong88

+0

Sie können 'Task.Run (...)' verwenden –