public async ValueTask <bool> MoveNextAsync() { if (!hasResult) { cancellationToken.ThrowIfCancellationRequested(); hasResult = true; return(true); } try { var useAsyncWaiting = false; cancellationToken.ThrowIfCancellationRequested(); SetContext(); useAsyncWaiting = SendAsync(); if (useAsyncWaiting) { await taskSource.Task; } else { socketEventArgs.ThrowIfNotSuccess(); } SetSuccess(); } catch (SocketException e) { SetError(e); } finally { taskSource.Reset(); } hasResult = true; return(true); }
public async ValueTask <bool> MoveNextAsync() { try { var useAsyncWaiting = false; cancellationToken.ThrowIfCancellationRequested(); InitializeRemoteEndPoint(); useAsyncWaiting = socket.ReceiveFromAsync(socketEventArgs); if (useAsyncWaiting) { await taskSource.Task; } else { socketEventArgs.ThrowIfNotSuccess(); } FillContext(); } catch (SocketException e) { FillContext(e); } finally { taskSource.Reset(); } hasResult = true; return(true); }