TPL を使用Task<TResult>
して、次の署名でスレッドセーフなメソッドを非同期的に呼び出し、ブール値の戻り値と出力パラメーターを取得することはできますか?
public bool TryGet(T1 criteria,
out T2 output)
明らかに、出力パラメーターのためにラムダ式を使用できません。さらに、コンストラクターがサポートしていない厳密に型指定されたパラメーターとして基準を渡す必要があるため、以下のようなカスタム デリゲートを定義してTask<TResult>
コンストラクターに渡すことによって問題を解決することはできません。
public delegate TResult Func<T1, T2, TResult>(T1 arg1,
out T2 arg2);
以下のようなラッパーを作成し、代わりに非同期で呼び出すための最良のオプションはありますか?
public Tuple<bool, T2> TryGetWrapper(T1 criteria)
{
T2 output;
bool result = obj.TryGet(criteria,
out output);
return new Tuple<bool, T2>(result,
output);
}
少しエレガントに見えず、少し気まぐれです。