public async ValueTask <MessageQueueMessage> DequeueAsync(MessageDequeueOptions options, CancellationToken cancellation = default) { if (options == null) { options = MessageDequeueOptions.Default; } var waitSeconds = (long)Math.Ceiling(options.Timeout.TotalSeconds); var request = new HttpRequestMessage(HttpMethod.Get, this.GetRequestUrl("messages") + (options != null && options.Timeout >= TimeSpan.Zero ? "?waitseconds=" + waitSeconds.ToString() : string.Empty)); request.Headers.Add("x-mns-version", "2015-06-06"); var response = await _http.SendAsync(request, cancellation); if (response.IsSuccessStatusCode) { return(MessageUtility.ResolveMessage(this, await response.Content.ReadAsStreamAsync(cancellation))); } var exception = AliyunException.Parse(await response.Content.ReadAsStringAsync(cancellation)); if (exception != null) { switch (exception.Code) { case MessageUtility.MessageNotExist: return(MessageQueueMessage.Empty); case MessageUtility.QueueNotExist: throw exception; default: throw exception; } } return(MessageQueueMessage.Empty); }
public PollArgument(MessageDequeueOptions options, int interval = 1000) { this.Options = options ?? MessageDequeueOptions.Default; this.Interval = Math.Max(interval, 100); }