Laden...

Azure Blob upload abbrechen

Erstellt von desaster vor einem Jahr Letzter Beitrag vor einem Jahr 579 Views
D
desaster Themenstarter:in
6 Beiträge seit 2021
vor einem Jahr
Azure Blob upload abbrechen

Hi,

ich bin mir nicht ganz sicher, ob ich im korrekten Unterforum bin. Falls nicht, bitte verschieben.

Ich mache gerade meine ersten Erfahrungen mit Azure und versuche jetzt einen Blobupload abzubrechen. Ich versuche dies über einen CancellationToken entsprechend zu signalisieren.


            FileUploadSasUriResponse sasUri = await deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest, cancelToken);
            Uri uploadUri = sasUri.GetBlobUri();

            if (!cancelToken.IsCancellationRequested)
            {
                //-----------------------------------------------------------------
                // Upload the file
                try
                {
                    var blockBlobClient = new BlockBlobClient(uploadUri);
                    
                    await blockBlobClient.UploadAsync(fileStreamSource, GetOptions(fileStreamSource.Length, uploadOptions), cancelToken);
                   
                }
                catch (TaskCanceledException)
                {
                    statusCode = 100;
                    isSuccess = false;
                    info = "Task canceled!";
                }
                catch (OperationCanceledException)
                {
                    statusCode = 200;
                    isSuccess = false;
                    info = "Task canceled!";
                }
                catch (Exception ex)
                {
                    statusCode = 300;
                    isSuccess = false;
                    info = ex.Message;
                }
                finally
                {
                    var successfulFileUploadCompletionNotification = new FileUploadCompletionNotification
                    {
                        // Mandatory. Must be the same value as the correlation id returned in the sas uri response
                        CorrelationId = sasUri.CorrelationId,

                        // Mandatory. Will be present when service client receives this file upload notification
                        IsSuccess = isSuccess,

                        // Optional, user defined status code. Will be present when service client receives this file upload notification
                        StatusCode = statusCode,

                        // Optional, user-defined status description. Will be present when service client receives this file upload notification
                        StatusDescription = info,
                    };
                    await m_DeviceClient.CompleteFileUploadAsync(successfulFileUploadCompletionNotification);
                }
                //-----------------------------------------------------------------
            }

den "cancelToken" setze ich dann von der aufrufenden Task. Trotzdem habe ich das Problem, dass anscheinend in der Cloud der Upload nicht korrekt abgebrochen wird. Versuche ich anschließend direkt den Upload neu zu starten, kommt eine Fehlermeldung von der Cloud, dass die max. Anzahl der parallelen Uploads erreicht ist. Das kann ja eigentlich nur auftreten, wenn der vorherige Upload nicht ordnungsgemäß abgebrochen wurde.

Habt ihr hiermit schon Erfahrungen sammeln können.

Besten Dank.

16.842 Beiträge seit 2008
vor einem Jahr

Wenn Du Fragen im Internet stellst, dann poste bitte auch immer die genaue, originale Fehlermeldung, am besten als Copy Paste.
Sonst müssen wir rumraten, welche Exception Du wirklich bekommst, die ja unterschiedliche Quellen haben kann. Auch wäre die Frage ob Du wirklich eine Fehlermeldung "von der Cloud" bekommst (in diesem Fall die Azure REST API) oder vom SDK - die beantwortet wäre, wenn man die Exception sehen würde.
Daher auch [Hinweis] Wie poste ich richtig? Punkt 5: Genaue Fehlermeldung

Canceln von Uploads funktioniert im Azure SDK eigentlich gut. Hab da nichts erlebt, was da nun auf ein Bug schließen würde.

Zum Thema Cancellation im Allgemeinen: Aufgabenabbruch
Damit meine ich besonders das:


  // Were we already canceled?
            ct.ThrowIfCancellationRequested();

Zu Deinem Exception Handling / Result stuff -> Best Practices for exceptions - .NET