C#5 async /等待简单化解释

Xen*_*ate 6 .net c# async-await

可能重复:
.Net 4.5中Async/Await的简要说明

我已经在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;
}
Run Code Online (Sandbox Code Playgroud)

但显然,这没有意义,对吧?因为我正在等待紧接着就行的TcpClient.ConnectAsync的结果.

但我想编写我的ConnectAsync()函数,以便在其他方法中等待它本身.这是正确的方法吗?我有点迷茫.:)

man*_*lds 4

我希望您已经了解了yield return创建迭代器的语法。它会暂停执行,然后在需要下一个元素时继续执行。您可以想到await做一些非常相似的事情。等待异步结果,然后继续该方法的其余部分。当然,它不会阻塞,因为它会等待。