繁体   English   中英

任务结果始终返回null

[英]Task result returning null always

我在WebSocket类中有Receive方法

public async Task<string> Receive()
        {
            byte[] buffer = new byte[1024];
            string response = string.Empty;

            while (_socket.State == WebSocketState.Open)
            {
                var result = await _socket.ReceiveAsync(new ArraySegment<byte>(buffer), new CancellationToken(false));

                if (result.MessageType == WebSocketMessageType.Close)
                    await _socket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
                else
                {
                    response = Encoding.UTF8.GetString(buffer).TrimEnd('\0');
                }
            }
            return response;
        }

从对象wb调用Receive方法,如下所示:

async Task<string> OnMessageReceive()
            {
                return await Task.Run(() => wb.Receive());
            }

期望接收到响应,但作为Result的一部分始终为null。

var msg = OnMessageReceive();
Console.WriteLine(msg.Result);

很难弄清楚为什么Result不返回字符串数据!

解决方案(上传到github repo)

我认为这是因为您在不等待的情况下调用了异步方法,因此它不会等待代码的完整执行

async Task<string> OnMessageReceive(){....}

var msg = OnMessageReceive(); // you need to use await key word to call this method

进行了几处更改,您应该一切顺利。

第一-

async Task<string> OnMessageReceive()
{
     return await wb.Receive();
}

第二-

var msg = await OnMessageReceive();
Console.WriteLine(msg);

希望这可以帮助。

我得到了答案:)

问题出在while循环上。 下面的代码行正在循环中执行,而第二个调用ReceiveAsync方法将重新执行,并通过重新初始化响应变量退出循环。

var result = await _socket.ReceiveAsync(new ArraySegment<byte>(buffer), new CancellationToken(false));

我也参考以下资源:

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/async-return-types

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM