可能重複:
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