2016-12-10 22 views
1

私はC#での非同期プログラミングについて頭を下ろそうとしています。私は基本的なWPFプログラムを作成しました。これには、非同期Start()メソッドを持つ新しいクラスCleaningServiceが含まれています。 WPFプログラムには、クリック時にStart()メソッドを呼び出すボタンがあります。C#での非同期プログラミング

このStart()メソッド内で、非同期Method1()メソッドを呼び出してから、非同期Method2()メソッドを呼び出したいとします。

ボタンをクリックすると、Method2()が呼び出されません。なぜこれが当てはまるのでしょうか?

コード:

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

あなたはタスクのコンストラクタを使用しないでください。これまで –

答えて

3

あなたはMethod1でタスクを開始したことはありません(あなただけTaskを作成し、それが開始されなかった)

+0

ああありがとう。私はちょうどThread.Sleep(1)のような何かをすべきだと思います。代わりに。 – kong88

+0

あなたは 'Task.Run(...)'を使うことができます –

関連する問題