基本上我正在做的是创建一个临时缓冲区,将数据写入byte [],然后返回缓冲区的大小;然后,我使用它来尝试通过网络对我的代码进行解除分段。 (试图让我的C#客户端与Netty的FrameDecoder类一起正常工作)
基本上,一旦找到缓冲区大小(动态)
,我就会将我的所有动作存储在列表中以通过网络调用 public void SendBuffer(DataOutputStream ClientOuput)
{
ClientOuput.WriteInt(GetBufferSize());
foreach (Action a in executionList)
{
// What Do?
}
}
我的问题是我需要调用DataOutputStream中通过SendBuffer参数传递的方法,所以像
这样的东西ClientOutput.a.invoke();
最好的方法是什么?
答案 0 :(得分:0)
不清楚你在问什么,但无论如何我试着回答。那么你有一堆你希望由DataOutputStream
实例执行的动作(在某处定义)?然后你可以做类似的事情:
public async void SendBuffer(DataOutputStream clientOuput)
{
var executionList = new List<Action>()
{
() => { Debug.WriteLine("whatyousay"); Thread.Sleep(1500); },
() => { Debug.WriteLine("allyourbase"); Thread.Sleep(1500); },
};
clientOuput.WriteInt(1);
foreach (Action action in executionList)
await clientOuput.Execute(action);
Debug.WriteLine("arebelongtous");
}
此处DataOutputStream
只是
public class DataOutputStream
{
// await and actions will be executed in given order, non-blocking
public Task Execute(Action action)
{
return Task.Run(action);
}
// fire & forget, non-blocking
public void BeginInvoke(Action action)
{
action.BeginInvoke(callback => {}, null);
}
// blocking
public void Invoke(Action action)
{
action.Invoke();
}
public void WriteInt(int integer)
{
Debug.WriteLine("int:{0}", integer);
}
}