第一次用ClientWebSocket,请教2个小问题

中文命名法 2017-09-03 02:29:21
public struct 中国
{
ClientWebSocket 客户端;
public async void 初始化()
{
序号 = 0;
客户端 = new ClientWebSocket();
await 客户端.ConnectAsync(new Uri("wss://plus-wsp.btcchina.com/"), CancellationToken.None);
var 缓冲 = new byte[10240];
while (客户端.State == WebSocketState.Open)
{
var 结果 = await 客户端.ReceiveAsync(new ArraySegment<byte>(缓冲), CancellationToken.None);
解析(JObject.Parse(Encoding.Default.GetString(缓冲, 0, 结果.Count)));
}
订阅行情();//这里的代码执行不到
}
void 请求(string 指令)//调用时跳错,说客户端没有被实例化,但是初始化时已经实例化了啊。
{
客户端.SendAsync(new ArraySegment<byte>(Encoding.Default.GetBytes(指令)), WebSocketMessageType.Text, true, new CancellationToken());
}
}
件事发现代码第15行永远运行不到;
void 请求被调用时,提示客户端没有被实例化,可是初始化时候明明已经实例化了。

请指教。
...全文
575 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
一品梅 2017-09-04
  • 打赏
  • 举报
回复
中文命名方式倡导者
中文命名法 2017-09-03
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
你把“订阅行情()”放到 while 循环后边,是什么逻辑呢?你是否理解 while 循环中有 await 的执行时序过程?此时什么时候会让 while 结束?
public struct 中国
{
    ClientWebSocket 客户端;
    public async void 初始化()
    {
        序号 = 0;
        if (客户端 != null)
            客户端.Dispose();
        客户端 = new ClientWebSocket();//wss://real.okcoin.cn:10440/websocket/okcoinapi 币行
        await 客户端.ConnectAsync(new Uri("wss://plus-wsp.btcchina.com/"), CancellationToken.None);
        监听();
        订阅行情();
    }
    async void 监听()
    {
        var 缓冲 = new byte[10240];
        while (客户端.State == WebSocketState.Open)
        {
            var 结果 = await 客户端.ReceiveAsync(new ArraySegment<byte>(缓冲), CancellationToken.None);
            解析(JObject.Parse(Encoding.Default.GetString(缓冲, 0, 结果.Count)));
        }
    }
    async void 请求(string 指令)
    {
        await 客户端.SendAsync(new ArraySegment<byte>(Encoding.Default.GetBytes(指令)), WebSocketMessageType.Text, true, new CancellationToken());
    }
}
我把监听写成一个方法,不影响后续代码执行了。但是void 请求被调用时,会说客户端没有别实例化。这是为什么呢?之前初始化()已经被调用过了,按理说 客户端 已经被new了呀。
  • 打赏
  • 举报
回复
你把“订阅行情()”放到 while 循环后边,是什么逻辑呢? 你是否理解 while 循环中有 await 的执行时序过程?此时什么时候会让 while 结束?
  • 打赏
  • 举报
回复
建议你正规学校学编程,至少10们以上基础课程的系统学习,不要仅靠个别语言的网上自学。

110,536

社区成员

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

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

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