WPFで,通信を伴うアプリケーションを作ろうとしています.
タイトルの通り,戻り値のいらないメソッドを非同期にしたうえで待機したいのですが,
戻り値を返すように呼び出し先のメソッドを変更する以外に何か良い方法はありますでしょうか?
通信を確立するための,次のようなメソッドを非同期にする際,
cs
1public class Client 2{ 3 // 外部からはこのプロパティで接続状態を確認します. 4 public ENUM_Status Status { get; private set; }; 5 6 public void OpenAsync() 7 { 8 // 文法的にはありえないことですが, 9 // 時間のかかる処理を行って結果を得ているものと考えていただければと思います. 10 bool isSuccessful = Thread.Sleep(10000); 11 if (isSuccessful) 12 { 13 this.Status = ENUM_Status.Connected; 14 } 15 else 16 { 17 this.Status = ENUM_Status.Disconnected; 18 } 19 } 20}
下のように書き換えずに(return
を書かずに)済む方法があるかを知りたいです.
cs
1public class Client 2{ 3 // 外部からはこのプロパティで接続状態を確認します. 4 public ENUM_Status Status { get; private set; }; 5 6 public async Task<bool> OpenAsync() 7 { 8 // 文法的にはありえないことですが, 9 // 時間のかかる処理を行って結果を得ているものと考えていただければと思います. 10 bool isSuccessful = Thread.Sleep(10000); 11 if (isSuccessful) 12 { 13 this.Status = ENUM_Status.Connected; 14 } 15 else 16 { 17 this.Status = ENUM_Status.Disconnected; 18 } 19 // プロパティを直接確認すればすむので,戻り値の情報は不要ですが, 20 // 待機するために Task<> を返すようにすると,戻り値が必要なので返しています. 21 return this.Staus == ENUM_Status.Connected; 22 } 23}
この場合,呼び出し元は次のようになります.
cs
1Client client = new Client(); 2await client.OpenAsync(); // 戻り値を格納しない. 3 4// 接続以降の処理.
回答2件
あなたの回答
tips
プレビュー