は、次のコードサンプルを考慮した結果を返したい、私はラムダ関数の戻り値を待つと
public XYZ GetSomething(string pluginId, string arg1, string arg2)
{
var plugin = (PluginType)_pluginManager.GetPlugin(pluginId, false);
plugin.RegisterCallback(result =>
{
//return this object instance of type XYZ
return result;
});
plugin.RequestData(arg1, arg2);
return null;
}
は、どのように私はこのメソッドの非同期を作成し、ラムダ関数の結果を待つとせずに結果を返すことができますこの方法をブロッキング法に変える? RequestData
のplugin
は非ブロックであり、変更できません。 result
が最終的に返され、オブジェクト・インスタンスであり、どのタスクにもラップされません。
ラムダ関数の結果を待ってから、結果を返すにはどうすればよいですか?
編集: RequestData
非常に迅速に完了します。リモートサーバーからデータを要求した後、数秒から数分かかるデータが返されると、コールバックを呼び出します。
あなたはちょうどその引数リストの前に「非同期」のキーワードを入れて非同期(async)ラムダ式をマークすることができますが、私はRegisterCallbackがパラメータとして非同期デリゲートを受け入れる疑う:あなたの
GetSomething()
メソッド内でこれらの事をラップするには、TaskCompletionSource
使用することができます。 –@ Marc-AntoineJacobはあまり待たずに使用しています –
@TimRutter明らかに、それは私の意図ですが、RegisterCallbackはタスクを待っている非同期の代理人を受け入れません。 –