考虑以下代码:
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 类(基于事件的异步模式)。
问题是:是否有可能永远无法到达 EndCommand,因为在离开“ExecuteAsync”方法后对象 basecommand 被释放?
连 .net 都知道 EndCommand 有回调方法吗?
或者.net 是否足够智能以保持对象处于活动状态,直到异步流程完成?
如果对象不存活,我能做些什么来指示垃圾收集器不要处理基本命令?