次のコードを検討してください。
public class ChainHandler
{
public void ProcessTopUp(string amount, string phone, ResponseCallback responseCallback)
{
var statebag = GetStateBag();
ICommand basecommand = new BlmLoginCommand(statebag);
basecommand .SetNext(new BlmDynamicCommand(statebag, RequestMessageEvent.TCD_RecargaTAE10, new Dictionary<string, string> { { "amt", amount }, { "cel", phone } }))
.SetNext(new BlmDynamicCommand(statebag, RequestMessageEvent.TCD_BuyProduct))
.SetNext(new BlmEndCommand(statebag, responseCallback));
basecommand.ExecuteAsync();
}
}
class Program
{
static void Main(string[] args)
{
ChainHandler ch = new ChainHandler();
ch.ProcessTopUp("5.00", "0123456789", OnProcessResponse);
Console.ReadLine();
}
private static void OnProcessResponse()
{
//...
}
}
メソッド「ExecuteAsync」は、コマンドを使用する非同期フローを開始します。内部で Socket クラスを非同期に使用するコマンド (イベント ベースの非同期パターン)。
問題は、「ExecuteAsync」メソッドを離れた後にオブジェクト basecommand が破棄されるため、EndCommand に到達しない可能性はありますか?
.net でさえ、EndCommand にコールバック メソッドがあることを知っていますか?
それとも、.net は、非同期フローが終了するまでオブジェクトを存続させるのに十分なほどインテリジェントですか?
オブジェクトが存続しない場合、ガベージ コレクターに basecommand を破棄しないように指示するにはどうすればよいですか?