可能重复:
Brief explanation of Async/Await in .Net 4.5C#5异步/等待最简单的说明
我在C#中被编程有一段时间了,但我不能让我围绕如何头新的异步/等待语言功能的作品。
我写了这样的功能:
public async Task<SocketError> ConnectAsync() {
if (tcpClient == null) CreateTCPClient();
if (tcpClient.Connected)
throw new InvalidOperationException("Can not connect client: IRCConnection already established!");
try {
Task connectionResult = tcpClient.ConnectAsync(Config.Hostname, Config.Port);
await connectionResult;
}
catch (SocketException ex) {
return ex.SocketErrorCode;
}
return SocketError.Success;
}
但显然,没有点到这一点,对不对?因为我正在等待紧接着的行上的TcpClient.ConnectAsync的结果。
但我想写我的ConnectAsync()函数,以便它本身可以用另一种方法等待。这是正确的方法吗?我有点失落。
await tcpClient.ConnectAsync(Config.Hostname, Config.Port);
因为等待的“任务”回归工程没有返回,除非函数有一个任务结果::)
如果你想有一个只有成功/失败的“异步”方法(没有“结果”值),然后返回“任务”而不是“任务”。在.NET中返回错误代码不是正常的做法。 –
Stephen:我实际上想返回SocketError(如果有的话),或者SocketError.Success(如果没有的话)。然而,你是否认为只是让任何SocketException被传播给调用者会更好? – Xenoprimate
@Migig是的,这就是他所说的。 – Servy