ラムダとデリゲートの新人ですが、簡単にするためにいくつかの既存のメソッドを書きたいと思います。C#ラムダデリゲート内のメソッドを残す
背景:ソケットを介して通信するクライアントアプリケーションとサーバーアプリケーションがあります。 CommunicationMessageは、送受信する値を保持するクラスです。
アクションをパラメータとして持つメソッドを定義しました。
public void SendAndReceive(CommunicationMessage query, Action<CommunicationMessage> OnReceivedResponse, Action<int> OnReceivedError, Action OnFailedSending) { ... }
このメソッドは次のように呼び出されます:あなたは私はそのラムダデリゲート内からメソッドを残したい見ることができるように
public static void LoginUser(string email, string password)
{
// Create the query which will be sent to the Server
CommunicationMessage query = MessageContentGenerator.GenerateLoginQuery(email, password).Result;
// Perorm the sending operation
CommunicationController.SendAndReceive(query,
(response) =>
{
BaseUser user = BaseUserController.Parse(response);
...
},
(errorCode) =>
{
// From here I want to leave the method LoginUser()
},
() =>
{
}
);
}
。これを達成する方法はありますか?
ありがとうございました!
はい私はこれを普通に好きですが、このタイプの実装から離れ、デザインパターンにもっと集中したいと思います。私は物事をクリアするために少しトピックを編集しました。 –
@DanielDirtyNativeMartinまだ私はあなたの問題が(あなたがここでコメントしたものと混同して)理解していません。実際にあなたが今持っているものと同じように設計された 'SendAndReceiveAsync'メソッドでは、私がここで提供した解決策は非常によく知られており、(async/awaitを利用する利点を得るための)良い習慣として従うべきです。 'SendAndReceiveAsync'のデザインを変更することができれば、ただちに非同期をサポートするためにすぐに進んで、' Task'の代わりに 'Task'を待ちます。次に、パターン間の変換に特別なメソッドは必要ありません –
このメソッドにasyncを使用する必要はありませんが、これは単なる例です。だから私は再びそれを編集した。私は2番目のラムダ内から* LoginUser *メソッド全体を残す(返す)必要があります。これが私の意味を理解するのに役立ちます。 –