1. ホーム
  2. c#

[解決済み] 非同期メソッドに値を返させるには?

2023-08-09 18:48:54

質問

非同期メソッドの作り方は知っていますが、例えば、多くの処理を行い、その後ブール値を返すメソッドがあるとします。

コールバックでboolean値を返すにはどうしたらいいですか?

明確な説明 :

public bool Foo(){
    Thread.Sleep(100000); // Do work
    return true;
}

これを非同期でできるようにしたい。

どのように解決するのですか?

いくつかの方法があります...最もシンプルなのは、非同期メソッドに後続の操作も行わせることです。もう一つの一般的な方法は、コールバックを渡すことです、つまり

void RunFooAsync(..., Action<bool> callback) {
     // do some stuff
     bool result = ...

     if(callback != null) callback(result);
}

もう一つの方法は、非同期処理が完了したときにイベント(event-argsのデータに結果を含む)を発生させることです。

また、TPLを利用している場合は ContinueWith :

Task<bool> outerTask = ...;
outerTask.ContinueWith(task =>
{
    bool result = task.Result;
    // do something with that
});