C# 如何返回任务?
我正在学习Websocket,从以下任务中如何返回C# 如何返回任务?,c#,asp.net-mvc,C#,Asp.net Mvc,我正在学习Websocket,从以下任务中如何返回 public override Task ReceiveAsync(WebSocket socket, WebSocketReceiveResult result, byte[] buffer) { string message = "Replied by: " + cn.GetId(socket); Task.Run(async () => {
public override Task ReceiveAsync(WebSocket socket, WebSocketReceiveResult result, byte[] buffer)
{
string message = "Replied by: " + cn.GetId(socket);
Task.Run(async () =>
{
await socket.SendAsync(buffer: new ArraySegment<byte>(array: Encoding.ASCII.GetBytes(message),
offset: 0,
count: message.Length),
messageType: WebSocketMessageType.Text,
endOfMessage: true,
cancellationToken: CancellationToken.None);
});
}
public override Task ReceiveAsync(WebSocket套接字、WebSocketReceiveResult结果、字节[]缓冲区)
{
string message=“回复人:”+cn.GetId(socket);
Task.Run(异步()=>
{
wait socket.SendAsync(缓冲区:new ArraySegment(数组:Encoding.ASCII.GetBytes(消息)),
偏移量:0,
计数:message.Length),
messageType:WebSocketMessageType.Text,
endOfMessage:对,
cancellationToken:cancellationToken.None);
});
}
我得到:严重性代码描述项目文件行抑制状态
错误CS0161“NotificationsMessageHandler.ReceiveAsync(WebSocket,WebSocketReceiveResult,字节[]”):并非所有代码路径都返回值
我不知道如何返回任务。您不需要任务。请显式运行,而不是
Task.Run(async () =>
{
await socket.SendAsync(buffer: new ArraySegment<byte>(array: Encoding.ASCII.GetBytes(message),
offset: 0,
count: message.Length),
messageType: WebSocketMessageType.Text,
endOfMessage: true,
cancellationToken: CancellationToken.None);
});
Task.Run(异步()=>
{
wait socket.SendAsync(缓冲区:new ArraySegment(数组:Encoding.ASCII.GetBytes(消息)),
偏移量:0,
计数:message.Length),
messageType:WebSocketMessageType.Text,
endOfMessage:对,
cancellationToken:cancellationToken.None);
});
你可以用
await socket.SendAsync(buffer: new ArraySegment<byte>(array: Encoding.ASCII.GetBytes(message),
offset: 0,
count: message.Length),
messageType: WebSocketMessageType.Text,
endOfMessage: true,
cancellationToken: CancellationToken.None);
wait socket.SendAsync(缓冲区:new ArraySegment(数组:Encoding.ASCII.GetBytes(消息)),
偏移量:0,
计数:message.Length),
messageType:WebSocketMessageType.Text,
endOfMessage:对,
cancellationToken:cancellationToken.None);
在这里,await将返回socket.SendAsync的结果,我假设它是异步的您不需要任务
Task.Run(async () =>
{
await socket.SendAsync(buffer: new ArraySegment<byte>(array: Encoding.ASCII.GetBytes(message),
offset: 0,
count: message.Length),
messageType: WebSocketMessageType.Text,
endOfMessage: true,
cancellationToken: CancellationToken.None);
});
Task.Run(异步()=>
{
wait socket.SendAsync(缓冲区:new ArraySegment(数组:Encoding.ASCII.GetBytes(消息)),
偏移量:0,
计数:message.Length),
messageType:WebSocketMessageType.Text,
endOfMessage:对,
cancellationToken:cancellationToken.None);
});
你可以用
await socket.SendAsync(buffer: new ArraySegment<byte>(array: Encoding.ASCII.GetBytes(message),
offset: 0,
count: message.Length),
messageType: WebSocketMessageType.Text,
endOfMessage: true,
cancellationToken: CancellationToken.None);
wait socket.SendAsync(缓冲区:new ArraySegment(数组:Encoding.ASCII.GetBytes(消息)),
偏移量:0,
计数:message.Length),
messageType:WebSocketMessageType.Text,
endOfMessage:对,
cancellationToken:cancellationToken.None);
在这里,wait将返回socket.sendaync的结果,我假设它是异步的我得到了错误:NotificationsMessageHandler.ReceiveAsync(WebSocket,WebSocketReceiveResult,字节[])“:并非所有代码路径都返回+1值:您还应该提到,不使用
Task.Run
的行为不同,因为它Task.Run
将工作安排在另一个线程上运行。在问题的上下文中,绝对不需要任务。运行@DevDon,使用return-await您不能使用return-await
,因为该方法不是async
@John,从方法名sendsync判断,我假设它是异步的,而ReceiveAsync应该是异步的,感谢您的提醒。我收到了错误:NotificationsMessageHandler.ReceiveAsync(WebSocket,WebSocketReceiveResult,byte[]):并非所有代码路径都返回值+1:您还应该提到,不使用任务。Run
有不同的行为,因为它任务。Run
将工作安排在另一个线程上运行。在这个问题的上下文中,绝对没有必要执行任务。运行@DevDon,使用return-await您不能使用return-await
,因为该方法不是async
@John,从方法名sendsync判断,我假设它是异步的,ReceiveAsync应该是异步的,谢谢您的提醒。