próbuję enqueue wiadomości w Azure kolejek asynchronicznie tak:asynchronicznie delegowania Azure kolejek
private async Task EnqueueItemsAsync(IEnumerable<string> messages) {
var tasks = messages.Select(msg => _queue.AddMessageAsync(new CloudQueueMessage(msg),
null, null, null, null));
await Task.WhenAll(tasks);
}
Jeśli mogę to prawo to mówi „start enqueuing jedną pozycję po drugiej bez nich, aby dostać zamieszczonych oczekiwania, utrzymać odniesienie dla każdego zadania, a następnie poczekać, aż wszystkie zostaną opublikowane ".
Ten kod działa prawidłowo w większości przypadków, ale w przypadku dużej liczby elementów (5000) zaczyna się podkręcać, a następnie zgłasza wyjątek limitu czasu (po zagnieżdżeniu ~ 3500 elementów).
Rozwiązałem go czeka każdy z nich, aby zakończyć przed kontynuowaniem następny
private async Task EnqueueItemsAsync(IEnumerable<string> messages) {
foreach (var message in messages) {
await _queue.AddMessageAsync(new CloudQueueMessage(message), null, null, null, null);
}
}
Czy ktoś może wyjaśnić, dlaczego tak się stało?
Wyjątek:
System.AggregateException
który zawija wiele takich wyjątków:Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass4.<CreateCallbackVoid>b__3(IAsyncResult ar)
Prośba o informacje RequestID: RequestDate: Komunikat stanu: < --- ---> (Wewnętrzna Wyjątek # 1) Microsoft.WindowsAzure.Storage. StorageException: Klient nie mógł zakończyć operacji w określonym czasie. ---> System.TimeoutException: Klient nie mógł zakończyć operacji w określonym czasie. --- Koniec wewnętrznego śledzenia stosu wyjątku --- Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndExecuteAsync [T] (Wynik IAsyncResult ) `.
Która linia zgłasza wyjątek? i która metoda? Opublikuj nazwę wyjątku, wiadomość i stacktrace –
@SriramSakthivel dzięki za wzmiankę, właśnie zaktualizowałem mój post –