【发布时间】:2021-08-31 09:21:15
【问题描述】:
documentation我在看书
上面写着:public Task<SocketMessage> SendReceiveAsync(SocketMessage query)
在源代码中是:public async Task<SocketMessage> SendReceiveAsync(SocketMessage query){...}
我想了解的是如何称呼它以及它是如何工作的。我尝试任何方法都会出错。
我要做的是从服务器发送和接收消息。我已经为此工作了好几个星期了,我也一直在阅读How and when to use ‘async’ and ‘await’,但我无法让它工作。
这是我设法做到的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Stride.Core.Mathematics;
using Stride.Input;
using Stride.Engine;
using Stride.Engine.Network;
using System.IO;
namespace MyGame
{
public class Net : SyncScript
{
string str = "";
public Stream socket;
public SimpleSocket SS;
public SocketMessage SM;
public SocketMessageLayer SML;
public void Server(){
SML = new SocketMessageLayer(SS, true);
//int port, bool singleConnection, int retryCount = 1
SS.StartServer(21, true, 1);
}
public void Client(){
SML = new SocketMessageLayer(SS, false);
//string address, int port, bool needAck = true
SS.StartClient("127.0.0.1", 21, true);
}
Task<SocketMessage> SendReceiveAsync(SocketMessage query){
//here I need to return somehow as I get error: not all code paths return a value
return query; // Error: Cannot implicitly convert type 'Stride.Engine.Network.SocketMessage' to 'System.Threading.Tasks.Task<Stride.Engine.Network.SocketMessage>'
}
public async Task ReceiveMessage(){
// you still need to get the query from somewhere...
SocketMessage result = await SML.SendReceiveAsync(SM);
//[abbreviated] // if I uncomment this I get: Error: ; expected
//Error: Invalid expression term '}'
}
public override void Start(){
}
public override void Update()
{
}
}
}
编辑: 里面的代码我已经解释了我尝试了什么以及什么不起作用
【问题讨论】:
-
删除
Task<SocketMessage> SendReceiveAsync(SocketMessage query);这一行,它看起来像一个没有主体的局部函数,并在await SendReceiveAsync之后使用括号来调用该方法。没有括号,这是一个方法组。
标签: c# async-await multiplayer