高难:如何把ClientWebSocket的一次发送和对应的接收封装成Task类型?

中文命名法 2018-02-28 10:33:53
多平台套利的应用,有些平台接口是REST的,有些是WebSocket的,于是很容易就蛋疼了。业务是满足条件就执行3个异步方法:下单,撤单,查成交。完成后要向主线程返回敞口(下单105手,成交15手的话,敞口就是90手)。使用rest的平台代码还比较方便,用异步post能顺利吐出返回值。ClientWebSocket缺无从下手了,发送指令和监听并不在同一个方法里。现在问题就是怎么能把ClientWebSocket的一次发送和对应的接收封装成Task<Double>类型?以便服从接口的格式。
interface 平台接口
{
Double[,] 余额 { get; }
Double[,] 委买 { get; set; }
Double[,] 委卖 { get; set; }
void 启动();
Task<Double> 遗留敞口(交易方向 方向, Double 价格, Double 数量);
}
struct okex : 平台接口
{
void 解析(DateTime 时间, String 消息)
void 下单(交易方向 方向, Double 价格, Double 数量)
void 撤单(String 编号)
void 查成交(String 订单号)
}
在okex实例里面,下单,撤单,查成交都是我主动想服务端发送指令之后,等待服务器向我传来的消息再按固定格式解析出结果。这个过程变成了6个步骤:下单=>解析出订单号=>使用订单号撤单=>解析撤单是否成功=>查成交数量=>解析成交数量。怎样才能把这个过程封装成一个异步的Task<Double>,以便通过接口,被主线程调用。
...全文
391 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
中文命名法 2018-02-28
  • 打赏
  • 举报
回复
引用 1 楼 From_TaiWan 的回复:
最好能根据实际情况编写一个类似的简单例子,一看即懂的,没时间看实际问题
struct okex : 平台接口
{
    void 解析(DateTime 时间, String 消息)
    void 下单(交易方向 方向, Double 价格, Double 数量)
    void 撤单(String 编号)
    void 查成交(String 订单号)
    public async Task<Double> 遗留敞口(交易方向 方向, Double 价格, Double 数量)
    {这里怎么封装}
}
ClientWebSocket是异步SendAsync和ReceiveAsync消息的,当Client启动连接后,发送和接收消息都在异步线程上,我要把3个发送动作和对应的3个接受消息封装在一个任务里,能明白吗?
秋的红果实 2018-02-28
  • 打赏
  • 举报
回复
最好能根据实际情况编写一个类似的简单例子,一看即懂的,没时间看实际问题

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧