在我的应用程序中,我有一个WebManager
进行Web调用,并在完成后为每个调用执行回调。传递给回调的对象取决于正在进行的特定Web调用,因此是通用的。简化,它看起来像这样:
public struct CommandParam<T> where T : DtoBase, new()
{
public DtoBase command;
public Action<T> onSuccess;
public Action onFailure;
public WWW www;
}
当Web调用成功时,文本将在正确的响应类中反序列化:
response = (T) JsonReader.Deserialize(commandParams.www.text, typeof(T));
commandParams.onSuccess(response);
但是当网络呼叫失败时,我想排队相关的CommandParam<T>
。在下一次Web调用或显式指令时,如果可能,将处理队列。我想象一个简单的队列:
private static Queue<CommandParam<DtoBase>> failedCommandQueue;
问题是,我显然无法将任何旧的CommandParam<T>
添加到队列中。此外,CommandParam<T>
无法投放到CommandParam<DtoObject>
。
所以我的问题是寻找适当处理这种情况的方法。我最近的想法是做一些动态的装箱/拆箱:
private struct BoxedCommand
{
public Type type;
public Object commandParam;
}
private static Queue<BoxedCommand> failedCommandQueue;
但我不知道实际上可以进行拆箱,因为在某些时候它需要使用type
来转换commandParam
(例如(type) commandParam
)。