【发布时间】:2013-01-12 02:47:22
【问题描述】:
我用 C# 编程已经有一段时间了,但我无法理解新的 async / await 语言功能是如何工作的。 p>
我写了一个这样的函数:
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() 函数,以便它本身可以在另一种方法中等待。这是正确的方法吗?我有点失落。 :)
【问题讨论】:
-
如果你想要一个只有成功/失败(没有“结果”值)的
async方法,那么返回Task而不是Task<SocketError>。返回错误代码不是 .NET 中的正常做法。 -
Stephen:我实际上想返回 SocketError(如果有),或者 SocketError.Success 如果没有。但是,您是说让任何 SocketException 传播给调用者会更好吗?
-
@Motig 是的,他就是这么说的。
-
本系列文章可能对您有所帮助。从底部开始;它们按时间倒序排列。 blogs.msdn.com/b/ericlippert/archive/tags/async
标签: c# .net async-await