[英]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不返回字符串数据!
我认为这是因为您在不等待的情况下调用了异步方法,因此它不会等待代码的完整执行
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.