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.
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
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code